Meddelande

Minska
No announcement yet.

Den "säkra" servern

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • #31
    >Tja... Samma "idiotlösning" som
    >exempelvis TUX (Linux) använder för att
    >vinna SPECweb99-tester. Även kHTTPd går i
    >kernel-mode.

    Kort förklaring hämtad från Linux kerneln:

    The kernel httpd acceleration daemon (kHTTPd) is a (limited) web server built into the kernel. It is limited since it can only serve files from the file system and cannot deal with executable content such as CGI scripts. Serving files is sped up if you use kHTTPd. If kHTTPd is not able to fulfill a request, it can transparently pass it through to a user space web server such as apache.

    >Jag är osäker på huruvida Apache går i
    >kernel eller user-mode.

    Apache går i user-mode.

    ------------------
    If you can't convince them, confuse them.
    So long and thanks for the fish.

    Tyvärr så har jag nu en person på min ignoreringslista. Personen ifråga höjer inte trivselfaktorn här, snarar tvärtom varför jag nu tackar för mig!

    Kommentera


    • #32
      [citat]Bara för att en process körs i kernelmode i NT, betyder inte det att koden "blandas" med kernelkoden. So bekant är 32 bitars op system utrustade med ett pagingsystem för programmens kod.[/citat]En helt vanlig 386-processor har fyra ringar i protected mode: ring 0 är skapad för kerneln, ring 3 för program och de två kvarvarande för andra saker (exempelvis drivrutiner under OS/2). Kernelmode innebär alltså att man rotar runt i ring 0 tillsammans med just kerneln. Förklara hur i *helvete* du ska kunna hindra en kernel-process att inte vandra fritt inne i kerneln.

      Tux och kHTTPD är förresten avslagbara. Vill du inte ha skiten så kompilerar du inte in det.

      ------------------
      Hollowhead - levererar din dagliga dos av nyttig hårdrock!
      Mä.

      Kommentera


      • #33

        Toonster, det finns flera fel i ditt inlägg. Precis som Chainsaw säger har man i kernel mode tillgång till allt - minne, CPU, och annan hårdvara. Man har även tillgång till usermode applikationers minne - dvs en bugg i din grafikdriver kan sänka exempelvis din webläsare.

        En drivrutin i Windows NT/2000/XP går i kernel mode. Kastar en drivrutin (exempelvis till grafikkortet) ett exception utan att hantera detta, så dyker det hela OSt. Historiskt sett (NT4) har 3 parts drivrutiner varit ganska skakiga, därav NT4:s inte helt ovanliga blue screen of death. Windows 2000 och framåt vill därför ha certifierade drivrutiner (som Microsoft godkänt) för att minimera dessa problem - vilket är en stor anledning till att Windows 2000 är mycket stabilare än NT4.

        Den stora vinsten med att lägga webservern i kerneln är inte alls att den får högre prioritet - vinsten ligger i att man sparar in onödiga kernel till user mode transitioner samt undviker att kopiera data mellan user och kernel mode adressrymder.

        Läs gärna:

        - http://www.microsoft.com/msj/0398/driver.htm
        - http://www.winntmag.com/Articles/Ind...&ArticleID=301
        - http://www.sysinternals.com/publ.shtml


        Reefer, anledningen till att jag tydligt gjorde Whistler vs. Windows XP var inlägget från "His Divine Shadow" (03 okt 2001 14:01). Jag tyckte det verkade som han råkat blanda ihop begreppen.


        [Redigerat av developer den 04 okt 2001]

        Kommentera


        • #34
          Reefer, anledningen till att jag tydligt gjorde Whistler vs. Windows XP var inlägget från "His Divine Shadow" (03 okt 2001 14:01). Jag tyckte det verkade som han råkat blanda ihop begreppen.


          Jo det gjorde jag eftersom alla tycks använda Whistler och XP som samma sak.
          Tyckte också att min XP Beta 2 skiva hade orden whistler på flera ställen

          ------------------
          His Divine Shadow is the most despicable being ever created, short and to the point.

          http://forums.planetdivine-shadow.com

          Sprit löser inga problem. Men det gör inte mjölk heller.
          "Those who make their swords into ploughshares will plough for those who didn't"

          Yes. As practice. You have to start out learning to believe the little lies.
          "So we can believe the big ones?"
          Yes. Justice. Mercy. Duty. That sort of thing.

          Schlock Mercenary | Sluggy Freelance | Positive Atheism | Talkorigins.org
          Kärnkraft är en av dom effektivaste energiformerna

          Kommentera


          • #35
            Kertnelmode innebär ju inte att programmen eller processerna ligger i kerneln eller dess utrymme. kernelmode är ju bara ett läge för en process. inte en plats. Då behövs en ny kompilerad kärna, vilket jag förstått att vissa Linuxkärnor har, i NT finns vissa andra funktioner bla. GDI i kerneln. Detta är egentliga systemfunktioner och inte drivrutiner för hårdvaran, de finns på ett annat ställe.
            Annars är det så att man kan tillåta drivrutiner och processer att köra i denna högsta prioritet (NT) fast det innebär inte att programmen rent fysiskt finns i kerneln, utan detta är bara en prioritetsfråga inom systempolicyn. Kernelmode prioritet ger samma prioritet (0) som kerneln dvs. absolut max, snäppet högre än den högsta realtidsprioriteten (1-15). Vanliga processer ligger mellan (16-32).
            Detta är en logisk representation av processtyrandet som inte betyder att programmen är placerade på vissa fysiska ställen i minnet.


            /T

            ------------------
            Jensen Ambassadör, mitt bästa köp! www.jensen.no
            Jensen Ambassadör, mitt bästa köp! www.jensen.no

            Kommentera


            • #36
              Jag tror att du behöver fräscha upp dina Assembler-kunskaper, Toonster. En kodsnutt i ring 0 kan fritt ändra vad som helst utan att bli hindrad. Processprioriteten behöver inte alls höjas bara för att du är i kerneln, det finns ett flertal exempel där man har avbrutit en tråd i ett systemanrop för att växla till en annan process. Prestandavinsten är faktiskt bara det att du inte behöver vandra från ring 3 till ring 0 utan kan direkt genomföra ett anrop.

              ------------------
              Hollowhead - levererar din dagliga dos av nyttig hårdrock!
              Mä.

              Kommentera


              • #37
                Det har nog blivit lite förbistringar...
                (tänk om vi skulle mötas över en öl, vilken diskussion...)

                Jag har "pratat" om processer som körs i kernel mode, dvs. dess prioritet. Jag förstår nu att ni kanske menar program I kerneln?. Detta är ju en ganska underlig diskussion eftersom man då måste kompilera om kerneln. Sedan pratet om drivrutiner i kerneln: visst men det måste kompileras först. I NT så finns vissa systemfunktioner (kernel mode device) som möjliggör att en drivrutin kan köras i kernel mode, men återigen, själva drivrutinen (mini driver'n) finns inte fysiskt i kerneln, utan körs av systemfunkltionen i kerneln och minidrivern kan då arbeta i kernel mode, med de aspekter detta ger, prioritet mm. Som utvecklare kan jag själv inte skapa en drivrutin som körs i kerneln, som inte använder de inbyggda systemfunktionerna(tro mig jag jobbar med detta...) utan får då skapa en VxD eller en systemservice som jag kan få att köras i hög prioritet. Eftersom det är riskabelt, som ni nämner, så brukar man inte utnyttja prioritet 0 utan använde 1-15, som ger realtidsprioritet, så att systemet själv kan sköta "ordningen". det kan vara bra om andra program kan få komma till..

                Visst Chainsaw, mina Assemblerkunskaper räcker nog till, och du har helt rätt i det du skriver, MEN, man måste ju kompilera om kärnan för att ett eget program ska kunna köras i kerneln. Detta är en stor fördel med Linux (inte ofta jag säger det...) I NT så kan man inte göra mer än jag nämde ovan, om man nu inte ska "hacka" kärnan...

                /T

                ------------------
                Jensen Ambassadör, mitt bästa köp! www.jensen.no
                Jensen Ambassadör, mitt bästa köp! www.jensen.no

                Kommentera


                • #38
                  Skilj på att köra i kernel och att köra i ring 0

                  Kör man i ring 0 så har man samma rättigheter som kernel, att läsa och skriva överallt.

                  Av denna anledning är det inte bra att köra "userspace" program, typ webservrar mm. i ring0.

                  Om nu webserver körs i ring 0, vad händer med cgi-program, kommer dessa också att köras i ring 0 isåfall är det rent idiotiskt att lägga en webbserver i ring 0. Eftersom då kan vem som helst skriva program som kan läsa OCH skriva obehindrat i hela minnet!

                  ------------------
                  If you can't convince them, confuse them.

                  [Redigerat av GunnarD den 05 okt 2001]
                  So long and thanks for the fish.

                  Tyvärr så har jag nu en person på min ignoreringslista. Personen ifråga höjer inte trivselfaktorn här, snarar tvärtom varför jag nu tackar för mig!

                  Kommentera


                  • #39
                    Tillägg till mitt inlägg ovan:

                    Vissa datorleverantörer har skapat en egen HAL som innehåller drivrutiner för den speciella hårdvaran (NT/W2K). Denna HAL installerar man samtidigt som operativsystemet. Mao. hårdvaran kräver vissa drivrutiner som standardkärnan inte har, utan leverantören skickar med en egen HAL version. Detta är de grundläggande drivrutinerna som finns i kärnan.

                    Här är Linux bättre rustat eftersom man kan kompilera kärnan "själv"

                    /T


                    ------------------
                    Jensen Ambassadör, mitt bästa köp! www.jensen.no
                    Jensen Ambassadör, mitt bästa köp! www.jensen.no

                    Kommentera


                    • #40
                      GunnarD, att köra CGI-script etc. i kernelmode vore som du säger förstås idiotiskt. ;-)

                      Så är inte fallet, det är bara själva http-hanteringen som sker i kernelmode. Kör man exempelvis en webserver-applikation routar http.sys till rätt applikation och skriver direkt in i applikationens minne från kernel mode. Applikationen går som vanligt i usermode. På så sätt slipper man kopiering och kernel-usermode transitions för kopiering av data.

                      Vidare, finns det som klienten efterfrågar i cachen (som http.sys äger, typiskt bilder och statiska sidor) sköter http.sys detta skickas dessa från i kernel mode. Man behöver således inte switcha till usermode vid cachehit. Vid cachemiss måste man upp och vända i usermode.

                      Kommentera


                      • #41
                        Då borde man få en "penalty" om man kör mycket dynamsika sidor, än om man körde bara i "user mode"?

                        Och det förutsätts att webserver inte har några fel, och inte av någon anledning börjar skriva någon annanstan pga. en pekare som pekar fel..

                        Som det kanske märks så är jag imot att köra applikationer i "kernel mode" (ring 0) den lilla fördelen man får med statiska sidor uppväger inte nackdelarna.

                        ------------------
                        If you can't convince them, confuse them.
                        So long and thanks for the fish.

                        Tyvärr så har jag nu en person på min ignoreringslista. Personen ifråga höjer inte trivselfaktorn här, snarar tvärtom varför jag nu tackar för mig!

                        Kommentera


                        • #42
                          Om kärnan är konstruerad riktigt, så ska ett program oavsett var det körs, som skriver utanför tilldelat minnesutrymme, skapa en "trap", och dispatchern ska kunna ta hand om detta "trap" error, och utföra lämplig åtgärd, ex dumpa registren i en logfil, och stoppa processen. Detta ställer höga krav på minneshanteringssystemet, och det är en sak som skiljer ex. mellan W2K professional och serverversionen.

                          Och visst är det onödigt att belasta kärnan med "farliga" funktioner, men är maskinen dedikerad för detta tex. den http server ni diskuterar, så borde det vara hyfsat säkert än om maskinen kör en massa ytterligare applikationer.

                          /T

                          ------------------
                          Jensen Ambassadör, mitt bästa köp! www.jensen.no
                          Jensen Ambassadör, mitt bästa köp! www.jensen.no

                          Kommentera


                          • #43

                            [citat]...den lilla fördelen man får med statiska sidor...[/citat]
                            Fördelen gäller inte bara gäller statiska sidor. Det blir aldrig dyrare vid cachemiss, ur prestandasynpunkt kan man bara vinna på detta. Vinsten är såklart störst för statiska sidor, men förbättrar prestanda i samtliga fall.

                            En cachemiss när http-handlern ligger i kernel mode är fortfarande billigare
                            än motsvarande situation då webservern ligger helt i usermode. Som tidigare,
                            anledningen är att man slipper en extra kopiering av data från usermode. Med IIS6 (, TUX eller kHTTPd) skriver kernelmode-handlern direkt in i usermode-applikationens minnesarea då data kommer från socketen. Dvs, ingen extra mellanlagringsbuffert för datat krävs (i och med att man från kernelmode har tillgång till även usermode applikationers minne)

                            För en usermode webserver skulle först datat från socketen i kernelmode mellanlagras i tcp/ip-stacken, för att sedan göra en transition till usermode och kopiera datat till webserverapplikationen.


                            Dock är det som du säger viktigt att kernelmode-drivern är korrekt. Fel som krascher och minnesläckor i kernelmode är oförlåtliga. Min erfarenhet är att IIS 5 inte haft några problem med minnesläckor eller kraschar.
                            Jag har sett ett par fall då inetinfo.exe dumpat, men det beror samtliga fall på buggar i 3-parts ISAPI extensions/filter.

                            Kommentera


                            • #44
                              [citat](Toonster) Jag har "pratat" om processer som körs i kernel mode, dvs.
                              dess prioritet.[/citat]Exakt vad menar du med detta?

                              [citat](Toonster) ...man måste ju kompilera om kärnan för att ett eget
                              program ska kunna köras i kerneln .... Som utvecklare kan jag själv inte
                              skapa en drivrutin som körs i kerneln...[/citat]Vad? Exempelvis drivrutinerna till min DVD-spelare är 3 parts - dessa går i kernelmode. Kerneln är inte alls omkompilerad för att möjliggöra detta. Detsamma gäller mina grafik-drivisar. Eller för den delen min antivirus-mjukvara. (Jag tror inte du vill ha ett antivirusprogram som ska vända i usermode för varje filaccess)

                              [citat](Toonster) Detta ställer höga krav på minneshanteringssystemet, och
                              det är en sak som skiljer ex. mellan W2K professional och serverversionen.[/citat]
                              Kan du beskriva exakt vad du menar skiljer mellan w2k pro och w2k server?
                              (Det är nämligen ingen som helst skillnad på "minneshanteringssystemet"
                              mellan w2k och w2k server. Det är samma binärer i båda fallen)

                              Toonster, du har nu skrivit ett flertal inlägg nu som är delvis eller
                              helt felaktiga. Försök spalta upp dina faktauppgifter i fortsättningen.
                              Skriv om sådant du säkert vet, och svep inte in dina fakta i luddiga meningar. Tack på förhand!


                              //Developer

                              Kommentera


                              • #45
                                ->Jag har "pratat" om processer som körs i kernel mode, dvs.
                                dess prioritet.

                                Jag antar att jag menade alla processer i kernelmode, med prioritet 0.

                                -> Ang drivrutinerna:
                                Drivrutiner som körs i kernelmode anväder de befintliga systemfunktionerna som finns i kärnan. 3 partsdrivrutinen i sig ligger inte i kärnan. I NT's fall finns ju dessa "kernelmode drivers" i executive lagret, lagret ett snäpp över microkerneln. Dessa kernelmode drivers kan laddas dynamsikt (typ din CD drivrutin), och de kan komma från 3 part. Naturligtvis så byter man inte context för en drivrutin. Låter som hårklyverier från min sida, men jag förstår vad du menar, medan jag förstår att jag varit oklar. Jag har haft tankarna på kärnan och dess systemfunktioner, native API. Ursäkta mig för det. Alltså jag menade att man kan inte skapa en drivrutin utan de grundläggande API'et. Där kan man ändra i Linux exempelvis.

                                ->Angående minneshanteringen så skiljer sig den bla. att serverversionerna i NT4 har 2GB systemminne, medan workstation 1GB systemminne av de totalt 4GB som kerneln klarar av. I W2K klarar kerneln totalt 32GB. Detta gör att kernelmode - usermode switchningen beter sig annorlunda. Drivrutiner i kernelmode behöver inte detta utrymme av förklarliga skäl, och i W2K så används där endast 32 bits adresspekare.

                                Ok, du vinner, jag håller mig ifrån tråden i fortsättningen, my bad!

                                /T

                                ------------------
                                Jensen Ambassadör, mitt bästa köp! www.jensen.no
                                Jensen Ambassadör, mitt bästa köp! www.jensen.no

                                Kommentera

                                Working...
                                X