Linux Internals. Enhetsdrivere og administrasjon

Brian Wards bok, som allerede har blitt en bestselger i Vesten. Den beskriver alle vanskelighetene ved å jobbe med Linux OS, systemadministrasjon og dype mekanismer som gir Linux-funksjonalitet på lavt nivå. På sidene i manualen vil du tilegne deg grunnleggende kunnskap om arbeid med Linux-kjernen og prinsippene for riktig drift av datanettverk, ikke bare basert på åpen kildekode-løsninger. Boken berører også spørsmål om skriptprogrammering og håndtering av C-språket, dekker temaer som informasjonssikkerhet, virtualisering og andre uerstattelige ting.
Hvem bør lese boka:
Interessen for utformingen av Linux-operativsystemet kan være forårsaket av ulike årsaker. Informasjonsteknologifagfolk og Linux-programvareutviklere vil i denne boken finne praktisk talt alt de trenger å vite for å få mest mulig ut av operativsystemet. Forskere og studenter, som ofte må tilpasse systemet for seg selv, vil her finne praktiske forklaringer på hvorfor ting fungerer som de gjør. Det finnes også "entertainere" - brukere som liker å bruke tid på datamaskinen for moro skyld, profitt eller begge deler. Vil du vite hvorfor noen ting fungerer og andre ikke? Lurer du på hva som vil skje hvis du endrer noe? Da er du en av "entertainerne".
De nødvendige betingelsene:
Du trenger ikke være programmerer for å lese denne boken. Kun grunnleggende PC-brukerferdigheter kreves: du må navigere i det grafiske grensesnittet (når du installerer og konfigurerer systemgrensesnittet), samt ha forståelse for filer og kataloger (mapper). Du bør også være forberedt på å søke på Internett for ytterligere dokumentasjon. Det viktigste er din vilje og lyst til å utforske datamaskinen din.

Tittel: Linux Internals
Forfatter: Brian Ward
Utgiver: Peter
År: 2016
Format: PDF, FB2, EPUB
russisk språk
Sider: 384
Størrelse: 12,9 MB

Linux Internals / Brian Ward / 2016. Last ned gratis uten registrering

2016-07-24T17:16:55+00:00 adminAdministrasjon Litteraturguider Linux, administrasjon, sikkerhet, Brian Ward, bøker, litteratur, håndbøker, systemadministrasjon, skript, kommandoreferanser

Brian Wards bok, som allerede har blitt en bestselger i Vesten. Den beskriver alle vanskelighetene ved å jobbe med Linux OS, systemadministrasjon og dype mekanismer som gir Linux-funksjonalitet på lavt nivå. På sidene i manualen vil du tilegne deg grunnleggende kunnskap om arbeid med Linux-kjernen og prinsippene for riktig drift av datanettverk, ikke bare basert på åpen kildekode-løsninger. I...

[e-postbeskyttet] Administrator LINUX opplæring

Vi har gitt ut en bok av Brian Ward, som allerede har blitt en bestselger i Vesten. Den beskriver alle vanskelighetene ved å jobbe med Linux-operativsystemet, systemadministrasjon og dype mekanismer som gir Linux-funksjonalitet på lavt nivå. På sidene i denne publikasjonen får du grunnleggende kunnskap om å arbeide med Linux-kjernen og prinsippene for riktig drift av datanettverk. Boken berører også spørsmålene om programmering av skallskript og håndtering av C-språket, dekker temaer som informasjonssikkerhet, virtualisering og andre uerstattelige ting.

Hvem bør lese boka

Interessen for utformingen av Linux-operativsystemet kan være forårsaket av ulike årsaker. Informasjonsteknologifagfolk og Linux-programvareutviklere vil i denne boken finne praktisk talt alt de trenger å vite for å få mest mulig ut av operativsystemet. Forskere og studenter, som ofte må tilpasse systemet for seg selv, vil her finne praktiske forklaringer på hvorfor ting fungerer som de gjør. Det finnes også "entertainere" - brukere som liker å bruke tid på datamaskinen for moro skyld, profitt eller begge deler. Vil du vite hvorfor noen ting fungerer og andre ikke? Lurer du på hva som vil skje hvis du endrer noe? Da er du en av "entertainerne".

De nødvendige forholdene

Du trenger ikke være programmerer for å lese denne boken. Du trenger bare grunnleggende databrukerferdigheter: du må kunne navigere i det grafiske grensesnittet (når du installerer og konfigurerer systemgrensesnittet), samt ha forståelse for filer og kataloger (mapper). Du bør også være forberedt på å søke i systemet og på nettet for ytterligere dokumentasjon. Som nevnt ovenfor, er det viktigste din vilje og lyst til å utforske datamaskinen din.

Hvordan lese en bok

Når det kommer til tekniske emner, er det ikke en lett oppgave å formidle all nødvendig kunnskap. På den ene siden henger leseren seg fast i unødvendige detaljer og har vanskeligheter med å fatte essensen, siden menneskesinnet rett og slett ikke kan behandle et stort antall nye konsepter samtidig. På den annen side fører mangelen på detaljer til at leseren bare får en vag idé om emnet og ikke er klar til å assimilere ytterligere materiale.

I denne boken har forfatteren forenklet presentasjonen og strukturert stoffet. I de fleste kapitler presenteres først viktig informasjon som er nødvendig for videre arbeid. Når du leser kapittelet, vil du møte ytterligere materiale i det. Trenger du umiddelbart å forstå disse opplysningene? I de fleste tilfeller tror forfatteren ikke. Hvis øynene dine begynner å blende over mengden av detaljer knyttet til materialet du nettopp har lært, ikke nøl med å gå videre til neste kapittel eller ta en pause. Andre viktige ting venter på deg.

Hvordan er denne boken organisert?

Boken begynner med en oversikt over Linux-systemet og gir deretter en rekke praktiske øvelser med verktøyene du trenger for å komme i gang med systemet. Deretter vil du utforske hver del av systemet i detalj, fra maskinvareadministrasjon til nettverkskonfigurasjon, i den vanlige rekkefølgen som systemet starter opp. Til slutt vil du få en forståelse av noen av detaljene i et fungerende system, lære noen viktige ferdigheter og bli kjent med verktøyene programmerere bruker.

De fleste av de tidlige kapitlene (unntatt kapittel 2) fokuserer sterkt på Linux-kjernen, men etter hvert som du går gjennom boken, vil du også jobbe i brukerområdet ditt. Hvis du ikke forstår hva forfatteren snakker om nå, ikke bekymre deg, forklaringer vil bli gitt i kapittel 1. Materialet presenteres, når det er mulig, uten referanse til noen systemdistribusjon. Det ville være kjedelig å beskrive alle variantene av systemet, så Ward prøvde å snakke om de to hovedfamiliene av distribusjoner: Debian (inkludert Ubuntu) og RHEL/Fedora/CentOS. Det er lagt vekt på server- og arbeidsstasjonsversjoner. Innebygde systemer som Android og OpenWRT er også representert, men å lære forskjellene mellom disse plattformene er overlatt til deg.

Hva er nytt i den andre utgaven

Den første utgaven av denne boken omhandlet hovedsakelig brukersiden ved å jobbe på et Linux-system. Hovedfokuset var på utformingen av delene og hvordan de skulle fungere. På den tiden var mange elementer i systemet vanskelig å installere og konfigurere riktig.

Takket være det harde arbeidet til programvareutviklere og Linux-distribusjonsskapere har dette endret seg. Ward reviderte den første utgavens materiale for oppdateringer, og tok spesielt hensyn til systemets oppstartsprosess og hvordan det administrerer maskinvare, og fjernet utdatert materiale (som en detaljert forklaring av utskriftsprosessen) for å utvide diskusjonen om rollen til Linux-kjernen i hver distribusjon. Du samhandler sannsynligvis med kjernen mye oftere enn du er klar over, og forfatteren har spesifikt notert tidspunktene da dette skjer.

Ward omorganiserte også bokens presentasjon for å passe interessene og behovene til moderne lesere. Det eneste som ikke har endret seg er lengden på boken.

Forfatteren ønsket å gi deg informasjonen du trenger for å komme raskt i gang. De vil kreve litt innsats for å mestre, men Ward har ikke tenkt å gjøre deg til en "vektløfter" slik at du kan overvinne denne boken. Når du forstår de viktige punktene som er skissert her, vil det være enkelt for deg å finne detaljene og forstå dem.

Forfatteren har fjernet noen historiske detaljer som var i den første utgaven, hovedsakelig for å fokusere oppmerksomheten din. Hvis du er interessert i Linux-systemet og dets forhold til Unix-systemets historie, se Peter H. Salus sin bok The Daemon, the Gnu, and the Penguin (Reed Media Services, 2008) - den forteller hvordan vi brukte programvaren til oss.

Mer informasjon om boken finner du på

Nåværende side: 1 (boken har totalt 30 sider) [tilgjengelig lesepassasje: 17 sider]

Brian Ward

Linux Internals

Oversetter S. Chernikov

Teknisk redaktør N. Grinchik

Litterær redaktør O. Andrievich

Kunstnere A. Bartsevich, V. Shimkevich

Korrekturlesere T. Kuryanovich, E. Pavlovich

Oppsett A. Bartsevich

Brian Ward

Linux Internals. – St. Petersburg: Peter, 2015.

ISBN 978-5-496-01952-1

© LLC Publishing House "Piter", 2015

Alle rettigheter forbeholdt. Ingen del av denne boken kan reproduseres i noen form uten skriftlig tillatelse fra opphavsrettsinnehaverne.

Forord

Jeg skrev denne boken med troen på at for å være vellykket og effektiv, må du forstå hvordan dataprogramvaren din fungerer og fungerer.

Linux-operativsystemet er flott for læring fordi det meste av systemkonfigurasjonen er lagret i enkle filer som er ganske enkle å lese. Du må bare finne ut hva hver del er ansvarlig for, og deretter sette alt sammen. Det er dette denne boken er dedikert til.

Interessen for utformingen av Linux-operativsystemet kan være forårsaket av ulike årsaker. Informasjonsteknologifagfolk og Linux-programvareutviklere vil i denne boken finne praktisk talt alt de trenger å vite for å få mest mulig ut av operativsystemet. Forskere og studenter, som ofte må tilpasse systemet for seg selv, vil her finne praktiske forklaringer på hvorfor ting fungerer som de gjør. Det finnes også "entertainere" - brukere som liker å bruke tid på datamaskinen for moro skyld, profitt eller begge deler.

Vil du vite hvorfor noen ting fungerer og andre ikke? Lurer du på hva som vil skje hvis du endrer noe? Da er du en av "entertainerne".

De nødvendige forholdene

Du trenger ikke være programmerer for å lese denne boken. Du trenger bare grunnleggende databrukerferdigheter: du må kunne navigere i det grafiske grensesnittet (når du installerer og konfigurerer systemgrensesnittet), samt ha forståelse for filer og kataloger (mapper). Du bør også være forberedt på å søke i systemet og på nettet for ytterligere dokumentasjon. Som nevnt ovenfor, er det viktigste din vilje og lyst til å utforske datamaskinen din.

Når det gjelder tekniske fag, er det ingen enkel oppgave å formidle all nødvendig kunnskap. På den ene siden henger leseren seg fast i unødvendige detaljer og har vanskeligheter med å fatte essensen, siden menneskesinnet rett og slett ikke kan behandle et stort antall nye konsepter samtidig. På den annen side fører mangelen på detaljer til at leseren bare får en vag idé om emnet og ikke er klar til å assimilere ytterligere materiale.

I denne boken har jeg forenklet presentasjonen og strukturert stoffet. I de fleste kapitler presenteres først viktig informasjon som er nødvendig for videre arbeid. Når du leser kapittelet, vil du møte ytterligere materiale i det. Trenger du umiddelbart å forstå disse opplysningene? I de fleste tilfeller tror jeg ikke. Hvis øynene dine begynner å blende over mengden av detaljer knyttet til materialet du nettopp har lært, ikke nøl med å gå videre til neste kapittel eller ta en pause. Andre viktige ting venter på deg.

Praktisk tilnærming

For å jobbe trenger du en datamaskin med Linux-operativsystemet. Du foretrekker kanskje en virtuell installasjon – jeg brukte VirtualBox til å teste det meste av materialet i denne boken. Du må ha superbruker (root) tilgang, selv om du bør bruke en standard brukerkonto mesteparten av tiden. Du vil primært jobbe på kommandolinjen, terminalvinduet eller ekstern økt. Hvis du ikke har jobbet i dette miljøet ofte, er det greit; du vil lære mer om det i kapittel 2.

Vanligvis vil kommandoene se slik ut:

Skriv inn tekst som er uthevet med fet skrift; Svarteksten som maskinen vil produsere vises med normal skrift. $-symbolet er en melding for en bruker med en vanlig konto. Hvis du ser #-symbolet ved ledeteksten, bør du bruke superbrukerkontoen (mer om dette i kapittel 2).

Hvordan er denne boken organisert?

Boken begynner med en oversikt over Linux-systemet og gir deretter en rekke praktiske øvelser med verktøyene du trenger for å komme i gang med systemet. Deretter vil du utforske hver del av systemet i detalj, fra maskinvareadministrasjon til nettverkskonfigurasjon, i den vanlige rekkefølgen som systemet starter opp. Til slutt vil du få en forståelse av noen av detaljene i et fungerende system, lære noen viktige ferdigheter og bli kjent med verktøyene programmerere bruker.

De fleste av de tidlige kapitlene (unntatt kapittel 2) fokuserer sterkt på Linux-kjernen, men etter hvert som du går gjennom boken, vil du også jobbe i brukerområdet ditt. Hvis du ikke forstår hva jeg snakker om nå, ikke bekymre deg, forklaringer vil bli gitt i kapittel 1.

Materialet presenteres når det er mulig uten referanse til noen systemdistribusjon. Det ville være kjedelig å beskrive alle systemvariantene, så jeg prøvde å snakke om de to hovedfamiliene av distribusjoner: Debian (inkludert Ubuntu) og RHEL/Fedora/CentOS. Det er lagt vekt på server- og arbeidsstasjonsversjoner. Innebygde systemer som Android og OpenWRT er også representert, men å lære forskjellene mellom disse plattformene er overlatt til deg.

Hva er nytt i den andre utgaven

Den første utgaven av denne boken omhandlet hovedsakelig brukersiden ved å jobbe på et Linux-system. Hovedfokuset var på utformingen av delene og hvordan de skulle fungere. På den tiden var mange elementer i systemet vanskelig å installere og konfigurere riktig.

Takket være det harde arbeidet til programvareutviklere og Linux-distribusjonsskapere har dette endret seg. Jeg har gjennomgått den første utgavens materiale for oppdateringer, spesielt oppmerksom på systemets oppstartsprosess og hvordan det administrerer maskinvare, og fjernet utdatert materiale (som en detaljert forklaring av utskriftsprosessen) for å utvide diskusjonen om rollen til Linux kjerne i hver distribusjon. Du samhandler sannsynligvis med kjernen oftere enn du er klar over, og jeg har spesifikt notert de gangene dette skjer.

Jeg har også omorganisert bokens presentasjon for å passe interessene og behovene til dagens lesere. Det eneste som ikke har endret seg er lengden på boken.

Jeg ønsket å gi deg informasjonen du trenger for å komme raskt i gang. De vil kreve litt innsats for å mestre, men jeg har ikke tenkt å gjøre deg til en "vektløfter" slik at du kan overvinne denne boken. Når du forstår de viktige punktene som er skissert her, vil det være enkelt for deg å finne detaljene og forstå dem.

Jeg har fjernet noen historiske detaljer som var i den første utgaven, hovedsakelig for å fokusere oppmerksomheten din. Hvis du er interessert i Linux-systemet og dets forhold til Unix-systemets historie, sjekk ut boken av Peter H. Salus Demonen, Gnuen og Pingvinen(Reed Media Services, 2008) - Den snakker om hvordan programvaren vi bruker har utviklet seg.

En merknad om terminologi

For tiden er det debatt om navnene på noen elementer i operativsystemene. Til og med navnet på Linux-systemet er involvert - skal det hete Linux eller GNU/Linux (for å gjenspeile bruken av noen elementer i GNU-prosjektet)? I boka prøvde jeg å bruke de vanligste og minst tungvinte navnene som er mulig.

Anerkjennelser

Jeg takker alle som hjalp meg med å jobbe med den første utgaven. Disse er James Duncan, Douglas N. Arnold, Bill Fenner, Ken Hornstein, Scott Dickson, Dan Ehrlich, Felix Lee Felix Lee, Scott Schwartz, Gregory P. Smith, Dan Sully, Karol Jurado og Gina Steele. For denne utgaven takker jeg spesielt Jordi Gutiérrez Hermoso for hans utmerkede tekniske anmeldelse; hans forslag og avklaringer er uvurderlige. Takk også til Dominique Poulain og Donald Karon for deres raske respons i de tidlige stadiene av arbeidet, og til Hsinju Hsieh, som tålmodig jobbet med meg for å revidere denne boken.

Jeg vil også takke utviklingsredaktøren min, Bill Pollock, og produksjonsredaktøren, Laurel Chun. Serena Yang, Alison Law og alle hos No Starch Press har, som alltid, gjort en fantastisk jobb med å produsere denne nye utgaven av boken.

Fra forlaget

Send dine kommentarer, forslag og spørsmål til e-postadressen sivchenk [e-postbeskyttet](Peter forlag, datautgave).

Vi vil gjerne høre din mening!

På forlagets nettside http://www.piter.com finner du detaljert informasjon om bøkene våre.

1. Det store bildet

Ved første øyekast er et moderne operativsystem, som Linux, ganske komplekst og består av et stort antall deler som samtidig fungerer og samhandler med hverandre. Dermed kan en webserver kommunisere med en databaseserver, som igjen bruker et delt bibliotek som brukes av mange andre programmer. Hvordan fungerer det hele?

Du kan mest effektivt forstå strukturen til operativsystemet ved å bruke abstraksjoner er en fin måte å si at du ignorerer de fleste detaljene. For eksempel, når du kjører bil, trenger du vanligvis ikke tenke på detaljer som monteringsboltene som holder motoren inne i bilen eller menneskene som asfalterer veien og holder den i god stand. Hvis du kjører i en bil som passasjer, er alt du trenger å vite hva bilen er designet for å gjøre (den tar deg et sted) og noen grunnleggende regler for bruk (hvordan du håndterer døren og sikkerhetsbeltet).

Hvis du kjører bil, må du vite mer. Du må bli kjent med kontrollene (som rattet og gasspedalen) og hva du skal gjøre i tilfelle feil.

La oss anta at bilen beveger seg i rykk. Du kan bryte ned abstraksjonen av "en bil som kjører på veien" i tre deler: bilen, veien og kjørestilen din. Dette vil bidra til å bestemme årsaken. Hvis veien er humpete, trenger du ikke skylde på bilen eller deg selv. I stedet kan du prøve å finne ut hvorfor veien ble dårligere, eller, hvis veien er ny, hvorfor dens utbyggere gjorde en så forferdelig jobb.

Programvareutviklere bruker abstraksjon som et verktøy når de lager operativsystemer og applikasjoner. Det er mange begreper for abstraherte områder av dataprogramvare, inkludert delsystem, modul Og plastpose. I dette kapittelet skal vi imidlertid bruke begrepet komponent fordi det er enkelt. Når du lager en programvarekomponent, bryr utviklerne seg vanligvis ikke så mye om den interne strukturen til de andre komponentene, men de må tenke på hvilke komponenter de kan bruke og hvordan de kan bruke dem.

Dette kapittelet gir en generell oversikt over komponentene som utgjør et Linux-system. Selv om hver av dem har en utrolig mengde tekniske detaljer knyttet til den interne strukturen, vil vi ikke ta hensyn til dem og fokusere på hva disse komponentene gjør i forhold til systemet som helhet.

1.1. Nivåer og lag av abstraksjon i Linux-operativsystemet

Å bruke abstraksjoner for å bryte ned datasystemer til komponenter gjør dem lettere å forstå, men hjelper ikke hvis det ikke er struktur. Vi vil ordne komponentene i lag, eller nivåer. Lag, eller nivå, er en måte å klassifisere (eller gruppere) komponenter i henhold til deres plassering mellom brukeren og maskinvaren. Nettlesere, spill osv. er plassert på det øverste laget; på det nederste laget ser vi datamaskinens minne: nuller og enere. Operativsystemet opptar det største antallet lag mellom disse to.

Det er tre hovednivåer i Linux-operativsystemet. I fig. Figur 1.1 viser nivåene, samt noen av komponentene innenfor hver av dem. Ved basen er plassert maskinvare. De inkluderer minne og en eller flere sentrale prosesseringsenheter (CPUer) som utfører beregninger og forespørsler om å lese fra og skrive til minnet. Enheter som harddisker og nettverksgrensesnitt regnes også som maskinvare.

Nivået over ligger kjerne, som er kjernen i operativsystemet. Kjernen er et program som ligger i datamaskinens minne og gir instruksjoner til sentralprosessoren. Kjernen administrerer maskinvaren og fungerer først og fremst som et grensesnitt mellom maskinvaren og ethvert program som kjører.

Prosesser – som kjører programmer administrert av kjernen – utgjør til sammen det øverste nivået i systemet, kalt brukerplass.

Merk

Et mer presist begrep enn "prosess" er "brukerprosess", uavhengig av om brukeren samhandler med den prosessen direkte. For eksempel kjører alle webservere som brukerprosesser.

Det er en viktig forskjell mellom hvordan kjerneprosesser og brukerprosesser startes: kjernen startes i kjernemodus, og brukerprosesser - i brukermodus. Kode som kjører i kjernemodus har ubegrenset tilgang til prosessoren og RAM. Dette er en kraftig fordel, men det kan være farlig fordi det lar kjerneprosesser enkelt forstyrre hele systemet. Området som kun er tilgjengelig for kjernen kalles kjernerom.

I brukermodus er til sammenligning bare en begrenset (vanligvis liten) mengde minne tilgjengelig, og bare sikre prosessorinstruksjoner er tillatt. Brukerplass er områder av RAM som kan nås av brukerprosesser. Hvis en prosess mislykkes, vil konsekvensene være begrenset og kjernen vil være i stand til å rydde opp i den. Dette betyr at hvis for eksempel nettleseren din krasjer, vil ikke de vitenskapelige beregningene du har kjørt i bakgrunnen i noen dager bli forstyrret.

Ris. 1.1. Generell struktur for Linux-operativsystemet

Teoretisk sett er ikke en ukontrollert brukerprosess i stand til å forårsake betydelig skade på systemet. Det avhenger virkelig av hva du anser som en "vesentlig skade" og de spesielle privilegiene til prosessen, siden noen prosesser har lov til å gjøre mer enn andre. Kan for eksempel en brukerprosess fullstendig ødelegge data på en harddisk? Hvis du konfigurerer tillatelsene riktig, kan det, og det vil være ekstremt farlig for deg. Det er sikringstiltak på plass for å forhindre dette, og de fleste prosesser vil rett og slett ikke få lov til å forårsake kaos på denne måten.

1.2. Maskinvare: RAM

Av all maskinvare RAM er kanskje det viktigste. I sin mest rå form er RAM bare en enorm butikk av strenger med enere og nuller. Hver null eller en kalles bit. Det er her den kjørende kjernen og prosessene er plassert - de er bare store samlinger av biter. Alle inn- og utdata fra perifere enheter passerer gjennom RAM også i form av sett med biter. CPU-en opererer ganske enkelt på minnet: den leser instruksjoner og data fra den, og skriver deretter dataene tilbake til minnet.

Du vil ofte komme over begrepet "stat", som vil referere til minne, prosesser, kjerne og andre deler av et datasystem. Strengt tatt er en tilstand ethvert ordnet arrangement av biter. For eksempel, hvis det er fire biter i minnet, representerer sekvensene 0110, 0001 og 1011 tre forskjellige tilstander.

Når man tenker på at en prosess lett kan bestå av millioner av minnebiter, er det ofte lettere å bruke abstrakte termer når man snakker om tilstander. I stedet for å beskrive en tilstand ved hjelp av biter, snakker du om hva som skjedde eller skjer i øyeblikket. For eksempel kan du si "denne prosessen venter på input" eller "prosessen utfører det andre trinnet i oppstartsprosedyren."

MERK

Fordi tilstander vanligvis beskrives ved bruk av abstrakte konsepter i stedet for faktiske biter, brukes begrepet "bilde" for å referere til ethvert fysisk arrangement av biter.

1.3. Kjerne

Nesten alt kjernen gjør involverer RAM. En av kjernens jobber er å distribuere minne i flere underseksjoner, hvoretter kjernen hele tiden må vedlikeholde informasjon om tilstanden til disse underseksjonene i orden. Hver prosess bruker et minneområde som er tildelt den, og kjernen må sørge for at prosessene holder seg til områdene deres.

Kjernen er ansvarlig for å administrere oppgaver i fire hovedområder av systemet.

Prosesser. Kjernen er ansvarlig for hvilke prosesser som får tilgang til den sentrale prosessoren.

Hukommelse. Kjernen må holde styr på tilstanden til alt minne: hvilken del som for øyeblikket er allokert til visse prosesser, hva som kan tildeles for deling mellom prosesser, og hvilken del er ledig.

Enhetsdrivere. Kjernen fungerer som et grensesnitt mellom maskinvare (som en harddisk) og prosesser. Vanligvis utføres maskinvareadministrasjon av kjernen.

SystemanropOgBrukerstøtte. Prosesser bruker vanligvis systemanrop for å kommunisere med kjernen.

Vi skal nå se kort på hvert av disse områdene.

MERK

For mer informasjon om hvordan kjernen fungerer, se Operating System Concepts, 9. utgave, av Abraham Silberschatz, Peter B. Galvin og Greg Gann. Gagne (Wiley, 2012) og Modern Operating Systems, 4. utgave av Andrew S. Tanenbaum og Herbert Bos (Prentice Hall, 2014).

1.3.1. Prosessledelse

Prosessledelse beskriver start, stopp, gjenopptagelse og avslutning av prosesser. Konseptene bak å starte og stoppe prosesser er ganske enkle. Det er litt vanskeligere å beskrive hvordan en prosess bruker CPU under normal drift.

I ethvert moderne operativsystem fungerer flere prosesser "samtidig". Du kan for eksempel starte en nettleser på datamaskinen og åpne et regneark samtidig. Men i virkeligheten er ikke ting som de ser ut: prosessene som er ansvarlige for disse applikasjonene starter vanligvis ikke Vnøyaktighet på et tidspunkt.

Tenk på et system med én sentral prosessor. Flere prosesser kan bruke det, men til enhver tid kan bare én prosess faktisk bruke prosessoren. I praksis bruker hver prosess CPU-en i en liten brøkdel av et sekund og stopper deretter; etter det bruker en annen prosess prosessoren i en liten brøkdel av et sekund; så kommer turen til den tredje prosessen osv. Handlingen der en prosess overfører kontroll over prosessoren til en annen prosess kalles kontekstbytte.

Hver tidsperiode kvantum av tid– gir prosessen nok tid til å utføre betydelig beregning (og selvfølgelig fullfører prosessen ofte sin nåværende oppgave innen ett kvante). Siden tidskvanter er så små, oppfatter ikke en person dem, og det virker for ham som om flere prosesser kjører samtidig i systemet (denne muligheten er kjent som "multitasking").

Kjernen er ansvarlig for kontekstbytte. For å forstå hvordan dette fungerer, se for deg en situasjon der en prosess kjører i brukermodus, men tidsdelen er i ferd med å renne ut. Dette er hva som skjer.

1. Prosessoren (ekte maskinvare) avbryter gjeldende prosess ved hjelp av en intern timer, bytter til kjernemodus og returnerer kontrollen til den.

2. Kjernen registrerer den nåværende tilstanden til prosessoren og minnet, som vil være nødvendig for å gjenoppta den nettopp avbrutt prosessen.

3. Kjernen utfører alle oppgaver som kan ha dukket opp i løpet av den forrige tidsdelen (for eksempel datainnsamling eller I/O-operasjoner).

4. Kjernen er nå klar til å starte en ny prosess. Den analyserer listen over prosesser som er klare til å kjøre og velger en av dem.

5. Kjernen forbereder minnet for den nye prosessen og forbereder deretter prosessoren.

6. Kjernen forteller prosessoren hvor lenge tidsdelen for den nye prosessen vil vare.

7. Kjernen setter prosessoren i brukermodus og overfører kontroll til prosessoren.

Kontekstbytte svarer på et viktig spørsmål: Når kjører kjernen? Svaret er: kjernen fungerer mellom tidsstykker tildelt for prosesser når en kontekstbytte skjer.

På et system med flere prosessorer er ting litt mer komplisert, siden kjernen ikke trenger å slutte å kontrollere gjeldende prosessor for å la noen prosess kjøre på en annen prosessor. Og likevel, for å få mest mulig ut av alle tilgjengelige prosessorer, gjør kjernen fortsatt dette (og kan bruke visse triks for å få ekstra prosessortid).

1.3.2. Minnehåndtering

Fordi kjernen må administrere minne under kontekstsvitsjer, er den utstyrt med denne komplekse funksjonen. Driften av kjernen er kompleks fordi følgende forhold må tas i betraktning:

Kjernen må ha sitt eget minneområde som ikke kan nås av brukerprosesser;

Hver brukerprosess trenger sitt eget minneområde;

Enhver brukerprosess må ikke ha tilgang til minne som er allokert til en annen prosess;

Brukerprosesser kan dele minne;

Noe minne for brukerprosesser kan være skrivebeskyttet;

Systemet kan bruke mer minne enn det som er tilgjengelig ved å bruke diskplass som en hjelpeenhet.

Kjernen har en hjelper. Moderne prosessorer inneholder minnestyringsmodul(MMU), som aktiverer en minnetilgangskrets kalt "virtuell hukommelse". Når du bruker virtuelt minne, får ikke en prosess tilgang til minnet direkte fra sin fysiske plassering i maskinvaren. I stedet konfigurerer kjernen hver prosess som om den hadde kontroll over hele maskinen. Når en prosess får tilgang til minnet, avskjærer MMU forespørselen og bruker et minneadressekart for å oversette minneplasseringen lært fra prosessen til en fysisk minneplassering på datamaskinen. Imidlertid må kjernen fortsatt initialisere, kontinuerlig vedlikeholde og endre dette adressekartet. For eksempel, under en kontekstbytte, må kjernen endre kartet etter avgangsprosessen og forberede det for den kommende.

Merk

Implementeringen av et minneadressekart kalles en sidetabell.

Du lærer hvordan du overvåker minneytelsen i kapittel 8.

1.3.3. Enhetsdrivere og administrasjon

Kjernens jobb med hensyn til enheter er ganske enkel. Vanligvis er enheter bare tilgjengelige i kjernemodus, siden feil tilgang (for eksempel når en brukerprosess prøver å slå av strømmen) kan føre til at datamaskinen krasjer. Et annet problem er at forskjellige enheter sjelden har samme programvaregrensesnitt, selv om de utfører samme oppgave: for eksempel to forskjellige nettverkskort. Av denne grunn er enhetsdrivere tradisjonelt sett en del av kjernen og streber etter å gi et enhetlig grensesnitt til brukerprosesser for å gjøre arbeidet til programvareutviklere enklere.

1.3.4. Systemanrop og support

Det er andre typer kjernefunksjoner tilgjengelig for brukerprosesser. For eksempel, systemanrop utføre spesielle oppgaver som en brukerprosess ikke kan utføre godt eller i det hele tatt alene. Dermed involverer alle handlinger knyttet til åpning, lesing og skriving av filer systemanrop.

To systemkall, fork() og exec(), er viktige for å forstå hvordan prosesser lanseres:

Gaffel(). Når en prosess kaller fork(), lager kjernen en nesten identisk kopi av prosessen;

Exec(). Når en prosess kaller exec( program), kjører kjernen programmet program, som erstatter dagens prosess.

Med unntak av init-prosessen (kapittel 6), Alle brukerprosesser på et Linux-system starter som et resultat av et fork()-kall, og i de fleste tilfeller gjøres et exec()-kall for å starte et nytt program i stedet for en kopi av en eksisterende prosess. Et enkelt eksempel er et hvilket som helst program du kjører fra kommandolinjen, for eksempel kommandoen ls som viser innholdet i en katalog. Når du skriver inn ls-kommandoen i et terminalvindu, kaller skallet som kjører inne i terminalvinduet fork() for å lage en kopi av skallet, og deretter kaller den nye kopien av skallet exec(ls) for å kjøre ls-kommandoen. I fig. Figur 1.2 viser sekvensen av prosesser og systemkall for å kjøre programmer som ls.

Ris. 1.2. Starter en ny prosess

MERK

Systemanrop er vanligvis angitt med parenteser. I eksemplet vist i fig. 1.2, må en prosess som ber kjernen om å opprette en annen prosess utstede systemkallet fork(). Denne betegnelsen kommer fra måten samtaler skrives på i programmeringsspråket C. Du trenger ikke å kunne C for å forstå denne boken. Bare husk at et systemkall er en interaksjon mellom en prosess og kjernen. Dessuten forenkler denne boken noen grupper av systemanrop. For eksempel betegner exec()-kallet en hel familie av systemanrop som utfører en lignende oppgave, men som er forskjellige i programvareimplementeringen.

Kjernen støtter også brukerprosesser hvis funksjoner skiller seg fra tradisjonelle systemanrop. De mest kjente av dem er pseudo-enheter. Fra synspunkt av brukerprosesser, ser pseudo-enheter ut som vanlige enheter, men de er implementert utelukkende i programvare. Faktisk burde de ikke formelt være i kjernen, men de er fortsatt tilstede i den av praktiske årsaker. For eksempel vil en enhet som genererer tilfeldige tall (/dev/random) være vanskelig å implementere med den nødvendige grad av sikkerhet ved å bruke en brukerprosess.

Merk

Teknisk sett er en brukerprosess som får tilgang til en pseudoenhet fortsatt tvunget til å foreta et systemanrop for å åpne den enheten. Dermed kan ikke prosesser helt unngå systemanrop.

1.4. Brukerplass

Området med RAM som kjernen tildeler for brukerprosesser kalles brukerplass. Siden en prosess bare er en tilstand (eller et bilde) i minnet, får brukerplass også tilgang til minnet til hele samlingen av kjørende prosesser. Du kan også komme over begrepet "brukerland", som brukes i stedet for brukerplass.

Det meste av den virkelige handlingen til et Linux-system skjer i brukerrommet. Selv om alle prosesser er like fra kjernens synspunkt, utfører de forskjellige oppgaver for brukerne. Systemkomponenter som representerer brukerprosesser er organisert i en elementær struktur - et tjenestelag (eller lag). I fig. Figur 1.3 viser et omtrentlig sett med komponenter koblet sammen og samhandler med Linux-systemet. Enkle tjenester er plassert på nederste nivå (nærmest kjernen), hjelpeprogrammer er i midten, og applikasjoner som brukeren jobber med er plassert på toppen. Figur 1.3 er et ekstremt forenklet diagram da kun seks komponenter er vist, men du kan legge merke til at toppkomponentene er nærmest brukeren (brukergrensesnittet og nettleseren); mellomlagskomponenter har en e-postserver som bruker en nettleser; Det er flere små komponenter i bunnen.

Det lavere nivået består vanligvis av små komponenter som utfører enkle oppgaver. Mellomlaget inneholder større komponenter som e-posttjenesten, utskriftsserveren og databasen. Komponenter på toppnivå utfører komplekse oppgaver som ofte styres direkte av brukeren. Hvis en komponent ønsker å bruke en annen, er den andre komponenten enten på samme tjenestenivå eller lavere.

Figur 1.3 viser bare grovt sett oppsettet for brukerplassen. I virkeligheten er det ingen regler i brukerområdet. For eksempel registrerer de fleste applikasjoner og tjenester diagnostiske meldinger som kalles magasiner. De fleste programmer bruker standard syslog-tjeneste for å logge meldinger, men noen velger å gjøre loggingen selv.

Ris. 1.3. Typer prosesser og interaksjoner

I tillegg kan enkelte brukerplasskomponenter være vanskelige å kategorisere. Komponenter på serversiden, for eksempel en webserver eller en databaseserver, kan betraktes som svært høynivåapplikasjoner fordi de utfører ganske komplekse oppgaver. Slike applikasjoner kan plasseres øverst i figuren. 1.3. Samtidig kan brukerapplikasjoner være avhengige av serverapplikasjoner for å utføre oppgaver som de ikke kan håndtere på egen hånd. I dette tilfellet bør serverkomponentene plasseres på mellomnivå.

1.5. Brukere

Linux-kjernen støtter det tradisjonelle konseptet for en Unix-systembruker. Bruker er en enhet som kan kjøre prosesser og egne filer. Tilknyttet bruker Brukernavn. For eksempel kan systemet ha en bruker som heter billyjoe. Kjernen håndterer imidlertid ikke brukernavn, i stedet identifiserer den brukeren ved hjelp av et enkelt tall bruker-ID(Kapittel 7 snakker om hvordan IDer kartlegges til brukernavn).

Vi rekrutterer en utgivelsesgruppe for vår tracker .
Betaling er omsettelig.
Søknader mottas per post [email protected], mulig gjennom tilbakemelding
Fortell oss kort om deg selv, hvor mye tid du kan bruke på siden vår og dine forventede inntekter.

Bandicam lar deg ta opp et spesifikt område på PC-skjermen, eller i et program som bruker DirectX/OpenGL-grafikkteknologier. Bandicam hjelper deg med å ta opp svært komprimert video....


Beskrivelse: Wondershare Filmora er en praktisk videoredigerer som inneholder alle nødvendige verktøy for videoredigering. Du kan lage filmer av høy kvalitet med titler, ...


EmEditor Professional- en profesjonell versjon av et kraftig tekstredigeringsprogram for programmerere, webutviklere og vanlige brukere med syntaksutheving og Unicode-støtte. Redaktøren har...

Driver for Reviver er et program som vil skanne systemet ditt for utdaterte drivere og tilby å oppdatere dem. Skanning utføres mot en av de største driverdatabasene, noe som garanterer....


Skype- et gratis program for tekst-, tale- og videokommunikasjon med venner over hele verden. Skype-nettverket bruker P2P-teknologi for å koble til andre brukere og er av høy kvalitet....


Bandizip er et raskt og pålitelig program som støtter arbeid med WinZip-, 7-Zip- og WinRAR-formater og andre lignende arkiver. Den bruker en veldig rask algoritme for komprimering og dekompresjon....

Opera er en ny Chromium-nettleser fra Opera Software. Opera har forlatt sin klassiske nettleser og utvikler nå en ny nettleser basert på Googles Chromium-prosjekt....

Beskrivelse: Et program for arbeid med PDF-dokumenter som gir en samling verktøy og verktøy for å endre og optimalisere PDF-filer og deres innhold. Takk til...


Snappy Driver Installer (SDI) er et bærbart program for å installere og oppdatere drivere som ikke krever en Internett-tilkobling. Det er en omarbeiding av det originale SDIO-programmet fra Glenn Delahoy....

Mirillis Action! - programmet lar deg ta opp skjermbilder i sanntid til videofiler i forskjellige formater. Du kan ta opp nettspillervideo, gameplay, sette inn live lydkommentarer ....



Boken du holder i hendene har allerede blitt en bestselger i Vesten. Den beskriver alle vanskelighetene ved å jobbe med Linux-operativsystemet, systemadministrasjon og dype mekanismer som gir Linux-funksjonalitet på lavt nivå. På sidene i denne boken vil du tilegne deg grunnleggende kunnskap om arbeid med Linux-kjernen og prinsippene for riktig drift av datanettverk. Boken berører også spørsmålene om programmering av skallskript og håndtering av C-språket, dekker temaer som informasjonssikkerhet, virtualisering og andre uerstattelige ting.

Nivåer og lag av abstraksjon i Linux-operativsystemet

Å bruke abstraksjoner for å bryte ned datasystemer til komponenter gjør dem lettere å forstå, men hjelper ikke hvis det ikke er struktur. Vi vil ordne komponentene i lag, eller nivåer. Et lag, eller lag, er en måte å klassifisere (eller gruppere) komponenter i henhold til deres plassering mellom brukeren og maskinvaren. Nettlesere, spill osv. er plassert på det øverste laget; på det nederste laget ser vi datamaskinens minne: nuller og enere. Operativsystemet opptar det største antallet lag mellom disse to.

Linux-operativsystemet har tre hovednivåer. Maskinvaren er plassert ved basen. De inkluderer minne og en eller flere sentrale prosesseringsenheter (CPUer) som utfører beregninger og forespørsler om å lese fra og skrive til minnet. Enheter som harddisker og nettverksgrensesnitt regnes også som maskinvare.

Nivået over er kjernen, som er kjernen i operativsystemet. Kjernen er et program som ligger i datamaskinens minne og gir instruksjoner til sentralprosessoren. Kjernen administrerer maskinvaren og fungerer først og fremst som et grensesnitt mellom maskinvaren og ethvert program som kjører.

Prosesser – som kjører programmer administrert av kjernen – utgjør til sammen det øverste nivået i systemet, kalt brukerplass. Et mer presist begrep enn "prosess" er "brukerprosess", uavhengig av om brukeren samhandler med den prosessen direkte. For eksempel kjører alle webservere som brukerprosesser.

Det er en viktig forskjell mellom hvordan kjerneprosesser og brukerprosesser lanseres: kjernen kjører i kjernemodus, mens brukerprosesser kjøres i brukermodus. Kode som kjører i kjernemodus har ubegrenset tilgang til prosessoren og RAM. Dette er en kraftig fordel, men det kan være farlig fordi det lar kjerneprosesser enkelt forstyrre hele systemet. Området som bare er tilgjengelig for kjernen kalles kjerneplass.

Til sammenligning har brukermodus bare en begrenset (vanligvis liten) mengde minne tilgjengelig, og kun prosessorsikre instruksjoner er tillatt. Brukerplass refererer til områder med RAM som kan nås av brukerprosesser. Hvis en prosess mislykkes, vil konsekvensene være begrenset og kjernen vil være i stand til å rydde opp i den. Dette betyr at hvis for eksempel nettleseren din krasjer, vil ikke de vitenskapelige beregningene du har kjørt i bakgrunnen i noen dager bli forstyrret.

Teoretisk sett er ikke en ukontrollert brukerprosess i stand til å forårsake betydelig skade på systemet. Det avhenger virkelig av hva du anser som en "vesentlig skade" og de spesielle privilegiene til prosessen, siden noen prosesser har lov til å gjøre mer enn andre. Kan for eksempel en brukerprosess fullstendig ødelegge data på en harddisk? Hvis du konfigurerer tillatelsene riktig, kan det, og det vil være ekstremt farlig for deg. Det er sikringstiltak på plass for å forhindre dette, og de fleste prosesser vil rett og slett ikke få lov til å forårsake kaos på denne måten.

Grunnleggende kommandoer og katalogstruktur

Dette kapittelet er en referanse til kommandoene og verktøyene til Unix-operativsystemet. Du kjenner sannsynligvis allerede de fleste av disse kommandoene, men for å gi deg litt selvtillit, spesielt når det kommer til katalogstruktur. Her er litt introduksjonsmateriale som jeg skal referere til gjennom boka.

Hvorfor snakker vi om Unix-kommandoer? Handler ikke denne boken om hvordan Linux fungerer? Ja, selvfølgelig, om dette, men selve kjernen i Linux er Unix-systemet.

Du vil se ordet Unix oftere her enn Linux, fordi det du lærer umiddelbart kan brukes på Solaris, BSD og andre Unix-relaterte systemer. Jeg har prøvd å unngå å dekke for mange Linux-spesifikke brukergrensesnittutvidelser, ikke bare for å gi deg et solid grunnlag for å bruke andre systemer, men også fordi slike utvidelser er ganske ustabile. Du vil kunne tilpasse deg nye Linux-utgivelser raskere hvis du kjenner de grunnleggende kommandoene.

Hvordan lastes Linux-kjernen?

Nå vet du om den fysiske og logiske strukturen til et Linux-system, hva kjernen er og hvordan du arbeider med prosesser. Du vil få informasjon om hvordan kjernen starter eller starter opp, med andre ord hvordan kjernen beveger seg inn i minnet frem til det punktet der den første brukerprosessen starter. Et forenklet diagram over lasteprosessen ser slik ut.

  1. Systemets BIOS eller oppstartsfastvaren laster inn og kjører systemets oppstartslaster.
  2. Systemoppstartslasteren finner kjernebildet på disken, laster det inn i minnet og kjører det.
  3. Kjernen initialiserer enheter og deres drivere.
  4. Kjernen monterer rotfilsystemet.
  5. Kjernen kjører init-kommandoen med prosess-ID 1. Dette punktet er starten på brukerplass.
  6. Init-kommandoen starter resten av systemprosessene.
  7. På et tidspunkt starter init-kommandoen en prosess som lar deg logge på systemet. Dette skjer vanligvis på slutten eller kort tid før systemet starter opp.

Trinn én til fire er dekket her, med fokus på kjernen og systemoppstartslastere. Kapittel 6 fortsetter historien om å laste brukerplass.

Å kunne identifisere hvert trinn i oppstartsprosessen vil vise seg uvurderlig ved feilsøking av oppstartsproblemer, og vil også hjelpe deg å forstå systemet som helhet. Imidlertid gjør standard oppstartsmodus i mange versjoner av Linux ofte noen av de tidlige trinnene vanskelige (om ikke umulige) å identifisere, og du vil sannsynligvis bare kunne se på dem når de er ferdige, etter at du har logget i.

Introduksjon til C Code Compiler Software

De fleste offentlig tilgjengelige tredjeparts programvarepakker for Unix kommer i kildekode som du kan bygge og installere. En grunn til dette er at det er så mange forskjellige versjoner og arkitekturer av Unix (og Linux selv) at det ville være vanskelig å lage binære pakker for alle mulige plattformkombinasjoner. En annen viktig grunn er at den brede distribusjonen av kildekode i Unix-fellesskapet oppfordrer brukere til å fikse feil i programvaren og introdusere nye funksjoner, noe som gir mening til begrepet «åpen kildekode».

Nesten alt du ser på et Linux-system kan fås som kildekode, fra kjernen og C-biblioteket til nettlesere. Det er til og med mulig å oppdatere og utvide systemet som helhet ved å (re)installere deler av systemet fra kildekoden. Imidlertid bør du sannsynligvis ikke oppgradere datamaskinen din ved å installere alt fra kilden med mindre du liker prosessen eller har en annen grunn.

Linux gir vanligvis enkle måter å oppdatere kritiske deler av systemet, for eksempel kommandoer i /bin-katalogen, og en ekstremt viktig egenskap ved systemene er at de vanligvis fikser sikkerhetsproblemer veldig raskt. Forvent imidlertid ikke at versjonen din gir alt du trenger uten innspill fra deg. Her er noen grunner til at du kanskje må installere visse pakker selv:

  • å kontrollere konfigurasjonsparametere;
  • å installere programvaren der du trenger den. Du kan til og med installere flere forskjellige versjoner av samme pakke;
  • for å kontrollere hvilken versjon du installerer. Systemdistribusjoner har ikke alltid den nyeste versjonen av alle pakker, spesielt de som er relatert til tilleggsprogramvare (som Python-biblioteker);
  • for bedre å forstå hvordan pakken fungerer.

Webservere og applikasjoner

Linux er et populært system for webservere, og den regjerende monarken blant Linux-applikasjonsservere er Apache HTTP Server (ofte referert til som Apache). En annen webserver du ofte hører om er Tomcat (også et prosjekt av Apache-utviklerne); den gir støtte for Java-applikasjoner.

Nettservere selv gjør ikke mye: de kan lagre filer, og det er omtrent det. Det endelige målet for de fleste webservere, som Apache, er å tilby en plattform for å kjøre webapplikasjoner. For eksempel er Wikipedia-prosjektet bygget på MediaWiki-pakken, som du kan bruke til å organisere ditt eget wiki-prosjekt. Innholdsstyringssystemer som WordPress og Drupal lar deg lage dine egne blogger og multimedienettsteder. Alle disse applikasjonene er basert på programmeringsspråk som fungerer spesielt godt på Linux. For eksempel er MediaWiki, WordPress og Drupal-systemer skrevet i PHP.

Byggeklossene som utgjør nettapplikasjoner er svært modulære, så det er enkelt å legge til dine egne utvidelser og bygge applikasjoner ved hjelp av rammeverk som Django, Flask og Rails, som gir fasiliteter for vanlige nettrammeverk og funksjoner, for eksempel bruk av maler, multi- brukeradministrasjon og databasestøtte.

Last ned fra gratis fillagring

Løs captchaen for å få tilgang til lenkene!