Ocenite etot tekst:




    V  prilozhenii daetsya kratkij obzor funkcij sistemy UNIX. Polnoe opisanie
etih funkcij soderzhitsya v  rukovodstve  programmista-pol'zovatelya  versii  V
sistemy UNIX. Svedenij, privedennyh zdes', vpolne dostatochno dlya togo, chtoby
razobrat'sya v primerah programm, predstavlennyh v knige.
    Imena fajlov, upominaemye v tekste, predstavlyayut soboj posledovatel'nos-
ti  simvolov, zavershayushchiesya pustym simvolom i sostoyashchie iz komponent, razde-
lennyh naklonnoj chertoj. V sluchae oshibki vse funkcii vozvrashchayut kod zavershe-
niya, ravnyj -1, a kod samoj oshibki zasylaetsya v  peremennuyu  errno,  imeyushchuyu
tip  external.  V  sluchae  uspeshnogo zaversheniya kod vozvrata imeet znachenie,
ravnoe 0. Nekotorye iz obrashchenij k operacionnoj sisteme yavlyayutsya tochkoj vho-
da srazu dlya neskol'kih funkcij: eto oznachaet, chto dannye funkcii ispol'zuyut
odin i tot zhe assemblernyj interfejs. Privodimyj spisok funkcij udovletvorya-
et standartnym usloviyam, prinyatym v spravochnyh rukovodstvah po sisteme UNIX,
pri etom voprosy, svyazannye s tem, yavlyaetsya li odno obrashchenie k operacionnoj
sisteme tochkoj vhoda dlya odnoj ili neskol'kih funkcij,  rassmatrivayutsya  ot-
del'no.


    access
      ______________________________

      access(filename,mode)
      char *filename;
      int mode;

    Funkciya  access proveryaet, imeet li process razreshenie na chtenie, zapis'
ili ispolnenie fajla (proveryaemyj tip dostupa zavisit ot znacheniya  parametra
mode).  Znachenie  mode yavlyaetsya kombinaciej dvoichnyh masok 4 (dlya chteniya), 2
(dlya zapisi) i 1 (dlya ispolneniya). Vmesto ispolnitel'nogo koda identifikacii
pol'zovatelya v proverke uchastvuet fakticheskij kod.


    acct
      ______________________________

      acct(filename)
      char *filename;

    Funkciya acct vklyuchaet uchet sistemnyh resursov,  esli  parametr  filename
nepustoj, i vyklyuchaet - v protivnom sluchae.



      ______________________________

      unsigned alarm(seconds)
      unsigned seconds;

    Funkciya  alarm planiruet posylku vyzyvayushchemu ee processu signala trevogi
cherez ukazannoe kolichestvo sekund (seconds). Ona  vozvrashchaet  chislo  sekund,
ostavsheesya do posylki signala ot momenta vyzova funkcii.


                                    400


      ______________________________

      int brk(end_data_seg)
      char *end_data_seg;

    Funkciya brk ustanavlivaet verhnyuyu granicu (starshij adres) oblasti dannyh
processa  v sootvetstvii so znacheniem parametra end_data_seg. Eshche odna funk-
ciya, sbrk, ispol'zuet tu zhe tochku vhoda i uvelichivaet adres verhnej  granicy
oblasti na ukazannuyu velichinu.



      ______________________________

      chdir(filename)
      char *filename;

    Funkciya  chdir  delaet  tekushchim  katalogom vyzyvayushchego processa katalog,
ukazannyj v parametre filename.



      ______________________________

      chmod(filename,mode)
      char *filename;

    Funkciya chmod izmenyaet prava dostupa k ukazannomu fajlu  v  sootvetstvii
so  znacheniem  parametra  mode, yavlyayushchimsya kombinaciej iz sleduyushchih kodov (v
vos'merichnoj sisteme):
      04000    bit ustanovki koda identifikacii pol'zovatelya
      02000    bit ustanovki gruppovogo koda identifikacii
      01000    priznak sticky bit
      00400    chtenie vladel'cem
      00200    zapis' vladel'cem
      00100    ispolnenie vladel'cem
      00040    chtenie gruppovym pol'zovatelem
      00020    zapis' gruppovym pol'zovatelem
      00010    ispolnenie gruppovym pol'zovatelem
      00004    chtenie prochim pol'zovatelem
      00002    zapis' prochim pol'zovatelem
      00001    ispolnenie prochim pol'zovatelem



      ______________________________

      chown(filename,owner,group)
      char *filename;
      int owner,group;

    Funkciya chown menyaet kody identifikacii vladel'ca i gruppy dlya ukazanno-
go fajla na kody, ukazannye v parametrah owner i group.



      ______________________________


                                    401

      chroot(filename)
      char *filename;

    Funkciya chroot izmenyaet chastnyj koren' vyzyvayushchego processa v sootvetst-
vii so znacheniem parametra filename.



      ______________________________

      close(fildes)
      int fildes;

    Funkciya close zakryvaet deskriptor fajla, poluchennyj v rezul'tate vypol-
neniya funkcij open, creat, dup, pipe ili fcntl, ili unasledovannyj ot  funk-
cii fork.



      ______________________________

      creat(filename,mode)
      char *filename;
      int mode;

    Funkciya  creat sozdaet novyj fajl s ukazannymi imenem i pravami dostupa.
Parametr mode imeet tot zhe smysl, chto i v funkcii access, pri  etom  priznak
sticky-bit  ochishchen, a razryady, ustanovlennye funkciej umask, sbrosheny. Funk-
ciya vozvrashchaet deskriptor fajla dlya posleduyushchego ispol'zovaniya v drugih fun-
kciyah.



      ______________________________

      dup(fildes)
      int fildes;

    Funkciya dup sozdaet kopiyu ukazannogo deskriptora fajla, vozvrashchaya  desk-
riptor  s naimen'shim nomerom iz imeyushchihsya v sisteme. Staryj i novyj deskrip-
tory ispol'zuyut odin i tot zhe ukazatel' na fajl, a takzhe i drugie  sovpadayu-
shchie atributy.



      ______________________________

      execve(filename,argv,envp)
      char *filename;
      char *argv[];
      char *envp[];

    Funkciya execve ispolnyaet fajl s imenem filename, zagruzhaya ego v adresnoe
prostranstvo  tekushchego processa. Parametr argv sootvetstvuet spisku argumen-
tov simvol'nogo tipa, peredavaemyh zapuskaemoj programme, parametr envp  so-
otvetstvuet massivu, opisyvayushchemu sredu vypolneniya novogo processa.




                                    402

      ______________________________

      exit(status)
      int status;

    Funkciya  exit  zavershaet  vyzyvayushchij  process,  vozvrashchaya ego roditelyu 8
mladshih razryadov iz slova sostoyaniya processa. YAdro samo mozhet  vyzyvat'  etu
funkciyu v otvet na postuplenie opredelennyh signalov.



      ______________________________

      fcntl(fildes,cmd,arg)
      int fildes,cmd,arg;

    Funkciya  fcntl  obespechivaet vypolnenie nabora raznoobraznyh operacij po
otnosheniyu k otkrytym fajlam, identificiruemym s pomoshch'yu deskriptora  fildes.
Parametry  cmd i arg interpretiruyutsya sleduyushchim obrazom (opredelenie bukven-
nyh konstant hranitsya v fajle "/usr/include/fcntl.h"):

      F_DUPFD    vernut' naimen'shee znachenie deskriptora,  bol'shee
                 ili  ravnoe znacheniyu arg
      F_SETFD    ustanovit' flag "close-on-exec" v mladshem razrya-
                 de arg (fajl budet zakryt funkciej exec)
      F_GETFD    vernut' sostoyanie flaga "close-on-exec"
      F_SETFL    ustanovit'  flagi,  upravlyayushchie sostoyaniem fajla
                 (O_NDELAY - ne priostanavlivat'sya v ozhidanii za-
                 versheniya vvoda-vyvoda,   O_APPEND - zapisyvaemye
                 dannye dobavlyat' v konec fajla)
      F_GETFL    poluchit' znacheniya flagov, upravlyayushchih sostoyaniem
                 fajla

      struct flock
              short l_type;   /* F_RDLCK - blokirovka     chteniya,
                                 F_WRLCK - blokirovka     zapisi,
                                 F_UNLCK - snyatie blokirovki */
              short l_whence; /* adres nachala blokiruemogo uchast-
                                 ka daetsya v vide smeshcheniya  otno-
                                 sitel'no nachala fajla (0), otno-
                                 sitel'no tekushchej pozicii  ukaza-
                                 telya (1),    otnositel'no  konca
                                 fajla (2) */
              long l_start;   /* smeshchenie v bajtah, interpretiru-
                                 emoe v sootvetstvii so znacheniem
                                 l_whence */
              long l_len;     /* dlina  blokiruemogo  uchastka   v
                                 bajtah. Esli ukazan 0,  blokiru-
                                 etsya uchastok ot l_start do konca
                                 fajla */
              long l_pid;     /* identifikator processa, blokiru-
                                 yushchego fajl */
              long l_sysid;   /* sistemnyj identifikator  proces-
                                 sa, blokiruyushchego fajl */

      F_GETLK    prochitat'  pervyj kod blokirovki,  meshayushchej  is-
                 pol'zovat' znachenie arg i  zatirat'  ego.   Esli
                 blokirovka otsutstvuet, pomenyat' znachenie l_type
                 v arg na F_UNLCK

                                    403

      F_SETLK    ustanovit' ili snyat' blokirovku fajla v  zavisi-
                 mosti ot znacheniya arg.  V  sluchae  nevozmozhnosti
                 ustanovit' blokirovku vernut' -1
      F_SETLKW   ustanovit' ili snyat' blokirovku  soderzhashchihsya  v
                 fajle dannyh  v  zavisimosti ot znacheniya arg.  V
                 sluchae nevozmozhnosti ustanovit' blokirovku  pri-
                 ostanovit' vypolnenie

      Blokirovki,  svyazannye s chteniem iz fajla, mogut perekryvat' drug dru-
ga. Blokirovki, svyazannye s zapis'yu, perekryvat'sya ne mogut.



      ______________________________

      fork()

    Funkciya fork sozdaet novyj process. Porozhdaemyj process predstavlyaet so-
boj logicheskuyu kopiyu processa-roditelya. Na vyhode iz funkcii  processu-rodi-
telyu vozvrashchaetsya kod identifikacii potomka, potomku - nulevoe znachenie.



      ______________________________

      getpid()

    Funkciya  getpid  vozvrashchaet  identifikator  vyzyvayushchego processa. |tu zhe
tochku vhoda ispol'zuyut funkcii: getpgrp, vozvrashchayushchaya identifikator  gruppy,
v  kotoruyu  vhodit vyzyvayushchij process, i getppid, vozvrashchayushchaya identifikator
processa, kotoryj yavlyaetsya roditelem tekushchego processa.



      ______________________________

      getuid()

    Funkciya getuid vozvrashchaet fakticheskij kod identifikacii pol'zovatelya vy-
zyvayushchego processa. |tu zhe tochku vhoda ispol'zuyut funkcii: geteuid,  vozvra-
shchayushchaya  ispolnitel'nyj  kod identifikacii pol'zovatelya, getgid, vozvrashchayushchaya
gruppovoj kod, i getegid, vozvrashchayushchaya ispolnitel'nyj gruppovoj kod  identi-
fikacii vyzyvayushchego processa.



      ______________________________

      ioctl(fildes,cmd,arg)
      int fildes,cmd;

    Funkciya ioctl vypolnyaet nabor special'nyh operacij po otnosheniyu k otkry-
tomu ustrojstvu, deskriptor kotorogo ukazan v parametre fildes. Tip komandy,
vypolnyaemoj  po  otnosheniyu k ustrojstvu, opisyvaetsya parametrom cmd, a para-
metr arg yavlyaetsya argumentom komandy.



      ______________________________

                                    404

      kill(pid,sig)
      int pid,sig;

    Funkciya kill posylaet processam, identifikatory kotoryh ukazany v  para-
metre pid, signal, opisyvaemyj parametrom sig.

      pid   imeet        signal posylaetsya processu s identifika-
      polozhitel'-        torom pid
      noe znachenie
      pid = 0            signal posylaetsya  processam,  gruppovoj
                         identifikator kotoryh  sovpadaet s iden-
                         tifikatorom otpravitelya
      pid = -1           esli process-otpravitel' ispolnyaetsya pod
                         identifikatorom superpol'zovatelya,  sig-
                         nal posylaetsya vsem processam, v protiv-
                         nom sluchae, signal posylaetsya processam,
                         fakticheskij kod  identifikacii pol'zova-
                         telya u kotoryh sovpadaet s identifikato-
                         rom superpol'zovatelya
      pid < -1           signal posylaetsya  processam,  gruppovoj
                         identifikator kotoryh sovpadaet s pid

    Ispolnitel'nyj  kod identifikacii pol'zovatelya processa-otpravitelya dol-
zhen ukazyvat' na superpol'zovatelya, v protivnom sluchae, fakticheskij ili  is-
polnitel'nyj kody identifikacii otpravitelya dolzhny sovpadat' s sootvetstvuyu-
shchimi kodami processov-poluchatelej.



      ______________________________

      link(filename1,filename2)
      char *filename1,*filename2;

    Funkciya  link prisvaivaet fajlu filename1 novoe imya filename2. Fajl sta-
novitsya dostupnym pod lyubym iz etih imen.



      ______________________________

      lseek(fildes,offset,origin)
      int fildes,origin;
      long offset;

    Funkciya lseek izmenyaet polozhenie ukazatelya  chteniya-zapisi  dlya  fajla  s
deskriptorom fildes i vozvrashchaet novoe znachenie. Polozhenie ukazatelya zavisit
ot znacheniya parametra origin:

      0    ustanovit' ukazatel' na poziciyu,  sootvetstvuyushchuyu uka-
           zannomu smeshcheniyu v bajtah ot nachala fajla
      1    sdvinut' ukazatel' s ego tekushchej pozicii  na ukazannoe
           smeshchenie
      2    ustanovit' ukazatel' na poziciyu,  sootvetstvuyushchuyu uka-
           zannomu smeshcheniyu v bajtah ot konca fajla



      ______________________________

                                    405

      mknod(filename,modes,dev)
      char *filename;
      int mode,dev;

    Funkciya  mknod sozdaet special'nyj fajl, katalog ili poimenovannyj kanal
(ochered' po principu "pervym prishel - pervym vyshel") v zavisimosti ot znache-
niya parametra modes:

      010000   poimenovannyj kanal
      020000   special'nyj fajl ustrojstva vvoda-vyvoda simvolami
      040000   katalog
      060000   special'nyj fajl ustrojstva vvoda-vyvoda blokami

    12 mladshih razryadov parametra modes imeyut tot zhe samyj smysl,  chto  i  v
funkcii  chmod. Esli fajl imeet special'nyj tip, parametr dev soderzhit star-
shij i mladshij nomera ustrojstva.



      ______________________________

      mount(specialfile,dir,rwflag)
      char *specialfile,*dir;
      int rwflag;

    Funkciya mount vypolnyaet montirovanie fajlovoj sistemy, na kotoruyu ukazy-
vaet parametr specialfile, v kataloge dir. Esli mladshij bit parametra rwflag
ustanovlen, fajlovaya sistema montiruetsya tol'ko dlya chteniya.



      ______________________________

      #include 
      #include 
      #include 

      msgctl(id,cmd,buf)
      int id,cmd;
      struct msgid_ds *buf;

    V zavisimosti ot operacii, ukazannoj v parametre cmd, funkciya msgctl da-
et processam vozmozhnost' ustanavlivat' ili zaprashivat' informaciyu o  statuse
ocheredi  soobshchenij s identifikatorom id, a takzhe udalyat' ochered' iz sistemy.
Struktura msquid_ds opredelena sleduyushchim obrazom:

    struct ipc_perm {
         ushort  uid;  /* identifikator tekushchego pol'zovatelya */
         ushort  gid;  /* identifikator tekushchej gruppy */
         ushort cuid;  /* identifikator pol'zovatelya-sozdatelya */
         ushort cgid;  /* identifikator gruppy sozdatelya */
         ushort mode;  /* prava dostupa */
         short  pad1;  /* ispol'zuetsya sistemoj */
         long   pad2;  /* ispol'zuetsya sistemoj */
    };

    struct msquid_ds {
          struct ipc_perm   msg_perm; /* struktura,   opisyvayushchaya
                                         prava dostupa */

                                    406

          short             pad1[7];  /* ispol'zuetsya sistemoj */
          ushort            msg_qnum; /* kolichestvo  soobshchenij  v
                                         ocheredi */
          ushort            msg_qbytes; /* maksimal'nyj    razmer
                                           ocheredi v bajtah */
          ushort            msg_lspid; /* identifikator processa,
                                          svyazannogo  s poslednej
                                          posylkoj soobshcheniya */
          ushort            msg_lrpid; /* identifikator processa,
                                          svyazannogo  s poslednim
                                          polucheniem soobshcheniya */
          time_t            msg_stime; /* vremya poslednej posylki
                                          soobshcheniya */
          time_t            msg_rtime; /* vremya poslednego  polu-
                                          cheniya soobshcheniya */
          time_t            msg_ctime; /* vremya poslednego  izme-
                                          neniya */
    };

    Tipy operacij:

    IPC_STAT   Prochitat' v bufer zagolovok ocheredi soobshchenij, as-
               sociirovannyj s identifikatorom id
    IPC_SET    Ustanovit'   znacheniya  peremennyh    msg_perm.uid,
               msg_perm.gid, msg_perm.mode  (9  mladshih  razryadov
               struktury msg_perm) i mgr_qbytes v sootvetstvii so
               znacheniyami, soderzhashchimisya v bufere
    IPC_RMID   Udalit' iz sistemy ochered' soobshchenij s identifika-
               torom id


    msgget

______________________________ #include #include #include msgget(key,flag) key_t key; int flag; Funkciya msgget vozvrashchaet identifikator ocheredi soobshchenij, imya kotoroj ukazano v key. Parametr key mozhet ukazyvat' na to, chto vozvrashchaemyj identi- fikator otnositsya k chastnoj ocheredi (IPC_PRIVATE), v etom sluchae sozdaetsya novaya ochered' soobshchenij. S pomoshch'yu parametra flag mozhno sdelat' ukazanie o neobhodimosti sozdaniya ocheredi (IPC_CREAT), a takzhe o tom, chto sozdanie oche- redi dolzhno vypolnyat'sya monopol'no (IPC_EXCL). V poslednem sluchae, esli oche- red' uzhe sushchestvuet, funkciya msgget daet otkaz.

    msgsnd i msgrcv

______________________________ #include #include #include msgsnd(id,msgp,size,flag) 407 int id,size,flag; struct msgbuf *msgp; msgrcv(id,msgp,size,type,flag) int id,size,type,flag; struct msgbuf *msgmp; Funkciya msgsnd posylaet soobshchenie ukazannogo razmera v bajtah (size) iz bufera msgp v ochered' soobshchenij s identifikatorom id. Struktura msgbuf opre- delena sleduyushchim obrazom: struct msgbuf { long mtype; char mtext[]; }; Esli v parametre flag bit IPC_NOWAIT sbroshen, funkciya msgsnd budet pri- ostanavlivat'sya v teh sluchayah, kogda razmer otdel'nogo soobshcheniya ili chislo soobshchenij v sisteme prevyshayut dopustimyj maksimum. Esli bit IPC_NOWAIT usta- novlen, funkciya msgsnd v etih sluchayah preryvaet svoe vypolnenie. Funkciya msgrcv prinimaet soobshchenie iz ocheredi s identifikatorom id. Esli parametr type imeet nulevoe znachenie, iz ocheredi budet vybrano soobshchenie, pervoe po schetu; esli polozhitel'noe znachenie, iz ocheredi vybiraetsya pervoe soobshchenie dannogo tipa; esli otricatel'noe znachenie, iz ocheredi vybiraetsya soobshchenie, imeyushchee samyj mladshij tip sredi teh tipov, znachenie kotoryh ne prevyshaet absolyutnoe znachenie parametra type. V parametre size ukazyvaetsya maksimal'nyj razmer soobshcheniya, ozhidaemogo pol'zovatelem. Esli v parametre flag ustanovlen bit MSG_NOERROR, v tom sluchae, kogda razmer poluchaemogo so- obshcheniya prevysit predel, ustanovlennyj parametrom size, yadro obrezhet eto so- obshchenie. Esli zhe sootvetstvuyushchij bit sbroshen, v podobnyh sluchayah funkciya bu- det vozvrashchat' oshibku. Esli v parametre flag bit IPC_NOWAIT sbroshen, funkciya msgrcv priostanovit svoe vypolnenie do teh por, poka soobshchenie, udovletvorya- yushchee ukazannomu v parametre type usloviyu, ne budet polucheno. Esli sootvetst- vuyushchij bit sbroshen, funkciya zavershit svoyu rabotu nemedlenno. Funkciya msgrcv vozvrashchaet razmer poluchennogo soobshcheniya (v bajtah).

    pise

______________________________ nice(increment) int increment; Funkciya nice uvelichivaet znachenie sootvetstvuyushchej komponenty, uchastvuyu- shchej v vychislenii prioriteta planirovaniya tekushchego processa, na velichinu increment. Uvelichenie znacheniya nice vedet k snizheniyu prioriteta planirova- niya.

    opep

______________________________ #include open(filename,flag,mode) char *filename; int flag,mode; Funkciya open vypolnyaet otkrytie ukazannogo fajla v sootvetstvii so zna- 408 cheniem parametra flag. Znachenie parametra flag predstavlyaet soboj kombinaciyu iz sleduyushchih razryadov (prichem iz pervyh treh razryadov mozhet byt' ispol'zovan tol'ko odin): O_RDONLY otkryt' tol'ko dlya chteniya O_WRONLY otkryt' tol'ko dlya zapisi O_RDWR otkryt' dlya chteniya i zapisi O_NDELAY esli fajl yavlyaetsya special'nym fajlom ustroj- stva, funkciya vozvrashchaet upravlenie, ne dozhida- yas' otvetnogo signala; esli fajl yavlyaetsya poime- novannym kanalom, funkciya v sluchae neudachi vozvrashchaet upravlenie nemedlenno (s indikaciej oshibki, kogda bit O_WRONLY ustanovlen), ne dozhi- dayas' otkrytiya fajla drugim processom O_APPEND dobavlyaemye dannye zapisyvat' v konec fajla O_CREAT esli fajl ne sushchestvuet, sozdat' ego; rezhim soz- daniya (mode) imeet tot zhe smysl, chto i v funkcii creat; esli fajl uzhe sushchestvuet, dannyj flag ig- noriruetsya O_TRUNC ukorotit' dlinu fajla do 0 O_EXCL esli etot bit i bit O_CREAT ustanovleny i fajl sushchestvuet, funkciya ne budet vypolnyat'sya; eto tak nazyvaemoe "monopol'noe otkrytie" Funkciya open vozvrashchaet deskriptor fajla dlya posleduyushchego ispol'zovaniya v drugih sistemnyh funkciyah.

    rause

______________________________ pause() Funkciya pause priostanavlivaet vypolnenie tekushchego processa do polucheniya signala.

    ripe

______________________________ pipe(fildes) int fildes[2]; Funkciya pipe vozvrashchaet deskriptory chteniya i zapisi (sootvetstvenno, v fildes[0] i fildes[1]) dlya dannogo kanala. Dannye peredayutsya cherez kanal v poryadke postupleniya; odni i te zhe dannye ne mogut byt' prochitany dvazhdy.

    rlock

______________________________ #include plock(op) int op; Funkciya plock ustanavlivaet i snimaet blokirovku oblastej processa v pa- myati v zavisimosti ot znacheniya parametra op: 409 PROCLOCK zablokirovat' v pamyati oblasti komand i dannyh TXTLOCK zablokirovat' v pamyati oblast' komand DATLOCK zablokirovat' v pamyati oblast' dannyh UNLOCK snyat' blokirovku vseh oblastej

    rrofil

______________________________ profil(buf,size,offset,scale) char *buf; int size,offset,scale; Funkciya profil zaprashivaet u yadra profil' vypolneniya processa. Parametr buf opredelyaet massiv, nakaplivayushchij chislo kopij processa, vypolnyayushchihsya v raznyh adresah. Parametr size opredelyaet razmer massiva buf, offset - na- chal'nyj adres uchastka profilirovaniya, scale - koefficient masshtabirovaniya.

    rtrase

______________________________ ptrace(cmd,pid,addr,data) int cmd,pid,addr,data; Funkciya ptrace daet tekushchemu processu vozmozhnost' vypolnyat' trassirovku drugogo processa, imeyushchego identifikator pid, v sootvetstvii so znacheniem parametra cmd: 0 razreshit' trassirovku potomku (po ego ukazaniyu) 1,2 vernut' slovo, raspolozhennoe po adresu addr v prost- ranstve trassiruemogo processa s identifikatorom pid 3 vernut' slovo, raspolozhennoe v prostranstve trassiru- emogo processa po adresu so smeshcheniem addr 4,5 zapisat' znachenie po adresu addr v prostranstve tras- siruemogo processa 6 zapisat' znachenie po adresu so smeshcheniem addr 7 zastavit' trassiruemyj process vozobnovit' svoe vy- polnenie 8 zastavit' trassiruemyj process zavershit' svoe vypol- nenie 9 mashinno-zavisimaya komanda - ustanovit' v slove sosto- yaniya programmy bit dlya otladki v rezhime poshagovogo vypolneniya

    read

______________________________ read(fildes,buf,size) int fildes; char *buf; int size; Funkciya read vypolnyaet chtenie iz fajla s deskriptorom fildes v pol'zova- tel'skij bufer buf ukazannogo v parametre size kolichestva bajt. Funkciya voz- vrashchaet chislo fakticheski prochitannyh bajt. Esli fajl yavlyaetsya special'nym fajlom ustrojstva ili kanalom i esli v vyzove funkcii open byl ustanovlen bit O_NDELAY, funkciya read v sluchae otsutstviya dostupnyh dlya chteniya dannyh 410 vozvratit upravlenie nemedlenno.

    semctl

______________________________ #include #include #include semctl(id,num,cmd,arg) int id,num,cmd; union semun { int val; struct semid_ds *buf; ushort *array; } arg; Funkciya semctl vypolnyaet ukazannuyu v parametre cmd operaciyu nad ochered'yu semaforov s identifikatorom id. GETVAL vernut' znachenie togo semafora, na kotoryj ukazy- vaet parametr num SETVAL ustanovit' znachenie semafora, na kotoryj ukazyva- et parametr num, ravnym znacheniyu arg.val GETPID vernut' identifikator processa, vypolnyavshego pos- lednim funkciyu semop po otnosheniyu k tomu semafo- ru, na kotoryj ukazyvaet parametr num GETNCNT vernut' chislo processov, ozhidayushchih togo momenta, kogda znachenie semafora stanet polozhitel'nym GETZCNT vernut' chislo processov, ozhidayushchih togo momenta, kogda znachenie semafora stanet nulevym GETALL vernut' znacheniya vseh semaforov v massive arg.array SETALL ustanovit' znacheniya vseh semaforov v sootvetstvie s soderzhimym massiva arg.array IPC_STAT schitat' strukturu zagolovka semafora s identifi- katorom id v bufer arg.buf IPC_SET ustanovit' znacheniya peremennyh sem_perm.uid, sem_perm.gid i sem_perm.mode (mladshie 9 razryadov struktury sem_perm) v sootvetstvii s soderzhimym bufera arg.buf IPC_RMID udalit' semafory, svyazannye s identifikatorom id, iz sistemy Parametr num vozvrashchaet na kolichestvo semaforov v obrabatyvaemom nabore. Struktura semid_ds opredelena sleduyushchim obrazom: struct semid_ds { struct ipc_perm sem_perm; /* struktura, opisyva- yushchaya prava dostu- pa */ int * pad; /* ispol'zuetsya siste- moj */ ushort sem_nsems; /* kolichestvo semafo- rov v nabore */ time_t sem_otime; /* vremya vypolneniya poslednej operacii nad semaforom */ 411 time_t sem_ctime; /* vremya poslednego izmeneniya */ }; Struktura ipc_perm imeet tot zhe vid, chto i v funkcii msgctl.

    semget

______________________________ #include #include #include semget(key,nsems,flag) key_t key; int nsems,flag; Funkciya semget sozdaet massiv semaforov, korrespondiruyushchij s parametrom key. Parametry key i flag imeyut tot zhe smysl, chto i v funkcii msgget.

    semor

______________________________ semop(id,ops,num) int id,num; struct sembuf **ops; Funkciya semop vypolnyaet nabor operacij, soderzhashchihsya v strukture ops, nad massivom semaforov, svyazannyh s identifikatorom id. Parametr num soder- zhit kolichestvo zapisej, sostavlyayushchih strukturu ops. Struktura sembuf oprede- lena sleduyushchim obrazom: struct sembuf { short sem_num; /* nomer semafora */ short sem_op; /* tip operacii nad semaforom */ short sem_flg; /* flag */ }; Peremennaya sem_num soderzhit ukazatel' v massive semaforov, associirovan- nyj s dannoj operaciej, a peremennaya sem_flg - flagi dlya dannoj operacii. Peremennaya sem_op mozhet prinimat' sleduyushchie znacheniya: otricatel'noe esli summa znacheniya semafora i znacheniya sem_op >= 0, znachenie semafora izmenyaetsya na velichinu sem_op; v protivnom sluchae, funkciya priostanavlivaet svoe vypolnenie, esli eto razresheno flagom polozhitel'noe uvelichit' znachenie semafora na velichinu sem_op nulevoe esli znachenie semafora ravno 0, prodol- zhit' vypolnenie; v protivnom sluchae, pri- ostanovit' vypolnenie, esli eto razresha- etsya flagom Esli dlya dannoj operacii v peremennoj sem_flg ustanovlen flag IPC_NOWAIT, funkciya semop vozvrashchaet upravlenie nemedlenno v teh sluchayah, kogda ona dolzhna byla by priostanovit'sya. Esli ustanovlen flag SEM_UNDO, 412 vosstanavlivaetsya predydushchee znachenie semafora (sem_op vychitaetsya iz tekushchej summy tipov operacij). Kogda process zavershitsya, znachenie semafora budet uvelicheno na etu summu. Funkciya semop vozvrashchaet znachenie poslednej operacii nad semaforom.

    setpgrr

______________________________ setpgrp() Funkciya setpgrp priravnivaet znachenie identifikatora gruppy, k kotoroj prinadlezhit tekushchij process, znacheniyu identifikatora samogo processa i vozv- rashchaet novoe znachenie identifikatora gruppy.

    setuid

______________________________ setuid(uid) int uid; setgid(gid) int gid; Funkciya setuid ustanavlivaet znacheniya fakticheskogo i ispolnitel'nogo ko- dov identifikacii pol'zovatelya tekushchego processa. Esli vyzyvayushchij process ispolnyaetsya pod upravleniem superpol'zovatelya, funkciya sbrasyvaet znacheniya ukazannyh kodov. V protivnom sluchae, esli fakticheskij kod identifikacii pol'zovatelya imeet znachenie, ravnoe znacheniyu uid, funkciya setuid delaet rav- nym etomu znacheniyu i ispolnitel'nyj kod identifikacii pol'zovatelya. To zhe samoe proishodit, esli znacheniyu uid raven kod, sohranennyj posle vypolneniya setuid-programmy, zapuskaemoj s pomoshch'yu funkcii exec. Funkciya setgid imeet tot zhe smysl po otnosheniyu k analogichnym gruppovym kodam.

    shmctl

______________________________ #include #include #include shmctl(id,cmd,buf) int id,cmd; struct shmid_ds *buf; Funkciya shmctl vypolnyaet razlichnye operacii nad oblast'yu razdelyaemoj pa- myati, associirovannoj s identifikatorom id. Struktura shmid_ds opredelena sleduyushchim obrazom: struct shmid_ds { struct ipc_perm shm_perm; /* struktura, opisyvayu- shchaya prava dostupa */ int shm_segsz; /* razmer segmenta */ int * pad1; /* ispol'zuetsya siste- moj */ ushort shm_lpid; /* identifikator pro- cessa, svyazannogo s 413 poslednej operaciej nad oblast'yu */ ushort shm_cpid; /* identifikator pro- cessa-sozdatelya */ ushort shm_nattch; /* kolichestvo prisoedi- nenij k processam */ short pad2; /* ispol'zuetsya siste- moj */ time_t shm_atime; /* vremya poslednego prisoedineniya */ time_t shm_dtime; /* vremya poslednego otsoedineniya */ time_t shm_ctime; /* vremya poslednego vneseniya izmene- nij */ }; Operacii: IPC_STAT prochitat' v bufer buf soderzhimoe zagolovka ob- lasti, associirovannoj s identifikatorom id IPC_SET ustanovit' znacheniya peremennyh shm_perm.uid, shm_perm.gid i shm_perm.mode (9 mladshih razrya- dov struktury) v zagolovke oblasti v sootvets- tvii s soderzhimym bufera buf IPC_RMID udalit' iz sistemy oblast' razdelyaemoj pamyati, associirovannoj s identifikatorom id

    shmget

______________________________ #include #include #include shmget(key,size,flag) key_t key; int size,flag; Funkciya shmget obrashchaetsya k oblasti razdelyaemoj pamyati ili sozdaet ee. Parametr size zadaet razmer oblasti v bajtah. Parametry key i flag imeyut tot zhe smysl, chto i v funkcii msgget.

    shmor

______________________________ #include #include #include shmat(id,addr,flag) int id,flag; char *addr; shmdt(addr) char *addr; 414 Funkciya shmat prisoedinyaet oblast' razdelyaemoj pamyati, associirovannuyu s identifikatorom id, k adresnomu prostranstvu processa. Esli parametr addr imeet nulevoe znachenie, yadro samo vybiraet dlya prisoedineniya oblasti podho- dyashchij adres. V protivnom sluchae ono pytaetsya prisoedinit' oblast', ispol'zuya v kachestve znachenie parametra addr v kachestve adresa. Esli v parametre flag ustanovlen bit SHM_RND, yadro v sluchae neobhodimosti okruglyaet adres. Funkciya shmat vozvrashchaet adres, po kotoromu oblast' prisoedinyaetsya fakticheski. Funkciya shmdt otsoedinyaet oblast' razdelyaemoj pamyati, prisoedinennuyu ra- nee po adresu addr.

    signal

______________________________ #include signal(sig,function) int sig; void (*func)(); Funkciya signal daet tekushchemu processu vozmozhnost' upravlyat' obrabotkoj signalov. Parametr sig mozhet prinimat' sleduyushchie znacheniya: SIGHUP "zavisanie" SIGINT preryvanie SIGQUIT prekrashchenie raboty SIGILL zapreshchennaya komanda SIGTRAP vnutrennee preryvanie, svyazannoe s trassirovkoj SIGIOT instrukciya IOT SIGEMT instrukciya EMT SIGFPE osobaya situaciya pri rabote s chislami s plavayushchej zapyatoj SIGKILL udalenie iz sistemy SIGBUS oshibka v shine SIGSEGV narushenie segmentacii SIGSYS nedopustimyj argument v vyzove sistemnoj funkcii SIGPIPE zapis' v kanal pri otsutstvii schityvayushchih processov SIGALRM signal trevogi SIGTERM zavershenie programmy SIGUSR1 signal, opredelyaemyj pol'zovatelem SIGUSR2 vtoroj signal, opredelyaemyj pol'zovatelem SIGCLD gibel' potomka SIGPWR otkaz pitaniya Parametr function interpretiruetsya sleduyushchim obrazom: SIG_DFL dejstvie po umolchaniyu. Oznachaet zavershenie pro- cessa v sluchae postupleniya lyubyh signalov, za is- klyucheniem SIGPWR i SIGCLD. Esli signal imeet tip SIGQUIT, SIGILL, SIGTRAP, SIGIOT, SIGEMT, SIGFPE, SIGBUS, SIGSEGV ili SIGSYS, sozdaetsya fajl "core", soderzhashchij damp obraza processa v pamyati SIG_IGN ignorirovat' postuplenie signala funkciya adres procedury v prostranstve processa. Po voz- vrashchenii v rezhim zadachi proizvoditsya obrashchenie k ukazannoj funkcii s peredachej ej nomera signala v kachestve argumenta. Esli signal imeet tip, otlich- nyj ot SIGILL, SIGTRAP i SIGPWR, yadro avtomati- cheski pereustanavlivaet imya programmy obrabotki signala v SIG_DFL. Signaly tipa SIGKILL processom ne obrabatyvayutsya 415 .te1 stat ______________________________ stat(filename,statbuf) char *filename; struct stat *statbuf; fstat(fd,statbuf) int fd; struct stat *statbuf; Funkciya stat vozvrashchaet informaciyu o statuse (sostoyanii) ukazannogo faj- la. Funkciya fstat vypolnyaet to zhe samoe v otnoshenii otkrytogo fajla, imeyushche- go deskriptor fd. Struktura statbuf opredelena sleduyushchim obrazom: struct stat { dev_t st_dev; /* nomer ustrojstva, na kotorom na- hoditsya fajl */ ino_t st_ino; /* nomer indeksa */ ushort st_mode; /* tip fajla (sm. mknod) i prava dostupa k nemu (sm. chmod) */ short st_nlink; /* chislo svyazej, ukazyvayushchih na fajl */ ushort st_uid; /* kod identifikacii vladel'ca fajla */ ushort st_gid; /* kod identifikacii gruppy */ dev_t st_rdev; /* starshij i mladshij nomera ustrojstva */ off_t st_size; /* razmer v bajtah */ time_t st_atime; /* vremya poslednego obrashcheniya */ time_t st_mtime; /* vremya poslednego vneseniya izmenenij */ time_t st_ctime; /* vremya poslednego izmeneniya statusa */ };

    stime

______________________________ stime(tptr) long *tptr; Funkciya stime ustanavlivaet sistemnoe vremya i datu v sootvetstvie so znacheniem, ukazannym v parametre tptr. Vremya ukazyvaetsya v sekundah ot 00:00:00 1 yanvarya 1970 goda po Grinvichu.

    syps

______________________________ sync() Funkciya sync vygruzhaet soderzhashchuyusya v sistemnyh buferah informaciyu (ot- nosyashchuyusya k fajlovoj sisteme) na disk.

    time

______________________________ time(tloc) 416 long *tloc; Funkciya time vozvrashchaet sistemnoe vremya v sekundah ot 00:00:00 1 yanvarya 1970 goda po Grinvichu.

    times

______________________________ #include #include times(tbuf) struct tms *tbuf; Funkciya times vozvrashchaet vremya v tajmernyh tikah, real'no proshedshee s lyubogo proizvol'nogo momenta v proshlom, i zapolnyaet bufer tbuf sleduyushchej uchetnoj informaciej: struct tms { time_t tms_utime; /* prodolzhitel'nost' ispol'zova- niya CP v rezhime zadachi */ time_t tms_stime; /* prodolzhitel'nost' ispol'zova- niya CP v rezhime yadra */ time_t tms_cutime; /* summa znachenij tms_utime i tms_cutime u potomkov */ time_t tms_sutime; /* summa znachenij tms_stime i tms_sutime u potomkov */ };

    ilimit

______________________________ ulimit(cmd,limit) int cmd; long limit; Funkciya ulimit daet processu vozmozhnost' ustanavlivat' razlichnye ograni- cheniya v zavisimosti ot znacheniya parametra cmd: 1 vernut' maksimal'nyj razmer fajla (v blokah po 512 bajt), v kotoryj process mozhet vesti zapis' 2 ustanovit' ogranichenie sverhu na razmer fajla ravnym znacheniyu para- metra limit 3 vernut' znachenie verhnej tochki preryvaniya (maksimal'nyj dostupnyj adres v oblasti dannyh)

    imask

______________________________ umask(mask) int mask; Funkciya umask ustanavlivaet znachenie maski, opisyvayushchej rezhim sozdaniya fajla (mask), i vozvrashchaet staroe znachenie. Pri sozdanii fajla bity razreshe- niya dostupa, kotorym sootvetstvuyut ustanovlennye razryady v mask, budut sbro- sheny. 417

    imount

______________________________ umount(specialfile) char *specialfile Funkciya umount vypolnyaet demontirovanie fajlovoj sistemy, raspolozhennoj na ustrojstve vvoda-vyvoda blokami specialfile.

    ipame

______________________________ #include uname(name) struct utsname *name; Funkciya uname vozvrashchaet informaciyu, identificiruyushchuyu sistemu v sootvet- stvii so sleduyushchej strukturoj: struct utsname { char sysname[9]; /* naimenovanie */ char nodename[9]; /* imya setevogo uzla */ char release[9]; /* informaciya o versii sistemy */ char version[9]; /* dopolnitel'naya informaciya o versii */ char machine[9]; /* tehnicheskij kompleks */ };

    iplink

______________________________ unlink(filename) char *filename; Funkciya unlink udalyaet iz kataloga zapis' ob ukazannom fajle.

    istat

______________________________ #include #include ustat(dev,ubuf) int dev; struct ustat *ubuf; Funkciya ustat vozvrashchaet statisticheskie dannye, harakterizuyushchie fajlovuyu sistemu s identifikatorom dev (starshij i mladshij nomera ustrojstva). Struk- tura ustat opredelena sleduyushchim obrazom: struct ustat { daddr_t f_tfree; /* kolichestvo svobodnyh blokov */ ino_t f_tinode; /* kolichestvo svobodnyh indeksov */ char f_fname[6]; /* naimenovanie fajlovoj sistemy */ char f_fpack[6]; /* sokrashchennoe (upakovannoe) 418 imya fajlovoj sistemy */ };

    itime

______________________________ #include utime(filename,times) char *filename; struct utimbuf *times; Funkciya utime pereustanavlivaet vremya poslednego obrashcheniya k ukazannomu fajlu i poslednego vneseniya izmenenij v sootvetstvii so znacheniyami, na koto- rye ukazyvaet parametr times. Esli parametr soderzhit nulevoe znachenie, is- pol'zuetsya tekushchee vremya. V protivnom sluchae parametr ukazyvaet na sleduyushchuyu strukturu: struct utimbuf { time_t axtime; /* vremya poslednego obrashcheniya */ time_t modtime; /* vremya poslednego vneseniya izmenenij */ }; Vse znacheniya otschityvayutsya ot 00:00:00 1 yanvarya 1970 goda po Grinvichu.

    wait

______________________________ wait(wait_stat) int *wait_stat; Funkciya wait pobuzhdaet process priostanovit' svoe vypolnenie do momenta zaversheniya potomka ili do momenta priostanova trassiruemogo processa. Esli znachenie parametra wait_stat nenulevoe, ono predstavlyaet soboj adres, po ko- toromu funkciya zapisyvaet vozvrashchaemuyu processu informaciyu. Pri etom ispol'- zuyutsya tol'ko 16 mladshih razryadov koda vozvrata. Esli obnaruzhen zavershivshij svoe vypolnenie potomok, 8 mladshih razryadov koda vozvrata soderzhat 0, a 8 starshih razryadov - kod vozvrata (argument) funkcii exit. Esli potomok zaver- shil svoe vypolnenie v rezul'tate polucheniya signala, kod vozvrata funkcii exit soderzhit nomer signala. Krome togo, esli obraz processa-potomka sohra- nen v fajle "core", proizvoditsya ustanovka bita 0200. Esli obnaruzhen prios- tanovivshij svoe vypolnenie trassiruemyj process, 8 starshih razryadov koda vozvrata funkcii wait soderzhat nomer privedshego k ego priostanovu signala, a 8 mladshih razryadov - vos'mirichnoe chislo 0177.

    write

______________________________ write(fd,buf,count) int fd,count; char *buf; Funkciya write vypolnyaet zapis' ukazannogo v count kolichestva bajt dan- nyh, nachinaya s adresa buf, v fajl s deskriptorom fd. 419

    BIBLIOGRAFIYA

[Babaoglu 81] Babaoglu, O., and W.Joy, "Converting a Swap-Based System to do Paging in an Architecture Lacking Page-Referenced Bits", Proceedings of the 8th Symposium on Operating Systems Principles, ACM Operating Systems Review, Vol. 15(5), Dec. 1981, pp. 78-86. [Bach 84] Bach, M.J., and S.J.Buroff, "Multiprocessor UNIX Systems", AT&T Bell Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8, Part 2, pp. 1733-1750. [Barak 80] Barak, A.B. and Aapir, "UNIX with Satellite Processors", Software - Practice and Experience, Vol. 10, 1980, pp. 383-392. [Beck 85] Beck, B. and B.Kasten, "VLSI Assist in Building a Multiprocessor UNIX System", Proceedings of the USENIX Association Summer Conference, June 1985, pp. 255-275. [Berkeley 83] UNIX Programmer's Manual, 4.2 Berkeley Software Distribution, Virtual VAX-11 Version, Computer Science Division, Department of Electrical Engineering and Computer Science, University of California at Berkeley, August 1983. [Birrell 84] Birrell, A.D. and B.J.Nelson, "Implementing Remote Procedure Calls", ACM Transactions on Computer Systems, Vol. 2, No. 1, Feb. 1984, pp. 39-59. [Bodenstab 84] Bodenstab, D.E., T.F.Houghton, K.A.Kelleman, G.Ronkin, and E.P.Schan, "UNIX Operating System Porting Experiences", AT&T Bell Laboratories Technical Journal, Vol. 63, No. 8, Oct. 1984, pp. 1769-1790. [Bourne 78] Bourne, S.R., "The UNIX Shell", The Bell System Technical Journal, July-August 1978, Vol. 57, No. 6, Part 2, pp. 1971-1990. [Bourne 83] Bourne, S.R., The UNIX System, Addison-Wesley, Reading, MA, 1983. [Brownbridge 82] Brownbridge, D.R., L.F.Marshall, and B.Randell, "The Newcastle Connection or UNIXes of the World Unite!" in Software - Practice and Experience, Vol. 12, 1982, pp. 1147-1162. [Bunt 76] Bunt, R.B., "Scheduling Techniques for Operating Systems", Computer, Oct. 1976, pp. 10-17. [Christian 83] Christian, K., The UNIX Operating System, John Wiley & Sons Inc., New York, NY, 1983. [Coffman 73] Coffman, E.G., and P.J.Denning, Operating Systems Theory, Prentice-Hall Inc., Englewood Cliffs, NJ, 1973. [Cole 85] Cole, C.T., P.B.Flinn, and A.B.Atlas, "An Implementation of an Extended File System for UNIX", Proceedings of the USENIX Conference, Summer 1985, pp. 131-149. [Denning 68] Denning, P.J., "The Working Set Model for Program Behavior, Communications of the ACM, Volume 11, No. 5, May 1968, pp. 323-333. [Dijkstra 65] Dijkstra, E.W., "Solution of a Problem in Concurrent Program Control", CACM, Vol. 8, No. 9, Sept. 1965, p. 569. [Dijkstra 68] Dijkstra, E.W., "Cooperating Sequential Processes", in Programming Languages, ed. F.Genuys, Academic Press, New York, NY, 1968. [Felton 84] Felton, W.A., G.L.Miller, and J.M.Milner, "A UNIX Implementation for System/370", AT&T Bell Laboratories Technical Journal, Vol. 63, No. 8, Oct. 1984, pp. 1751- 1767. [Goble 81] Goble, G.H. and M.H.Marsh, "A Dual Processor VAX 11/780", Purdue University Technical Report, TR-EE 81-31, Sept. 1981. [Henry 84] Henry, G.J., "The Fair Share Scheduler", AT&T Bell Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8, Part 2, pp. 1845-1858. 420 [Holley 79] Holley, L.H., R.P421rmelee, C.A.Salisbury, and D. N.Saul, "VM/370 Asymmetric Multiprocessing", IBM Systems Journal, Vol. 18, No. 1, 1979, pp. 47-70. [Holt 83] Holt, R.C., Concurrent Euclid, the UNIX System, and Tunis, Addison-Wesley, Reading, MA, 1983. [Horning 73] Horning, J.J., and B.Randell, "Process Structuring", Computing Surveys, Vol. 5, No. 1, March 1973, pp. 5-30. [Hunter 84] Hunter, C.B. and E.Farquhar, "Introduction to the NSI16000 Architecture", IEEE Micro, April 1984, pp. 26- 47. [Johnson 78] Johnson, S.C. and D.M.Ritchie, "Portability of C Programs and the UNIX System", The Bell System Technical Journal, Vol. 57, No. 6, Part 2, July-August, 1978, pp. 2021-2048. [Kavaler 83] Kavaler, P. and A.Greenspan, "Extending UNIX to Local-Area Networks", Mini-Micro Systems, Sept. 1983, pp. 197-202. [Kernighan 78] Kernighan, B.W., and D.M.Ritchie, The C Programming Language, Prentice-Hall, Englewood Cliffs, NJ, 1978. [Kernighan 84] Kernighan, B.W., and R.Pike, The UNIX Programming Environment, Prentice-Hall, Englewood Cliffs, NJ, 1984. [Killian 84] Killian, T.J., "Processes as Files", Proceedings of the USENIX Conference, Summer 1984, pp. 203-207. [Levy 80] Levy, H.M., and R.H.Eckhouse, Computer Programming and Architecture: The VAX-11, Digital Press, Bedford, MA, 1980. [levy 82] Levy, H.M., and P.H.Lipman, "Virtual Memory Management in the VAX/VMS Operating System", Computer, Vol. 15, No. 3, March 1982, pp. 35-41. [Lu 83] Lu, P.M., W.A.Dietrich, et. al., "Architecture of a VLSI MAP for BELLMAC-32 Microprocessor", Proc. of IEEE Spring Compcon, Feb. 28, 1983, pp. 213-217. [Luderer 81] Luderer, G.W.R., H.Che, J.P.Haggerty, P.A.Kirslis, and W.T.Marshall, "A Distributed UNIX System Based on a Virtual Circuit Switch", Proceedings of the Eighth Symposium on Operating Systems Principles, Asilomar, California, December 14-16, 1981. [Lycklama 78a] Lycklama, H. and D.L.Bayer, "The MERT Operating System", The Bell System Technical Journal, Vol. 57, No. 6, Part 2, July-August 1978, pp. 2049-2086. [Lycklama 78b] Lycklama, H. and C.Christensen, "A Minicomputer Satellite Processor System", The Bell System Technical Journal, Vol. 57, No. 6, Part 2, July- August 1978, pp. 2103-2114. [McKusick 84] McKusick, M.K., W.N.Joy, S.J.Leffler, and R.S. Fabry, "A Fast File System for UNIX", ACM Transactions on Computer Systems, Vol. 2(3), August 1984, pp. 181-197. [Mullender 84] Mullender, S.J. and A.S.Tanenbaum, "Immediate Files", Software - Practice and Experience, Vol. 14(4), April 1984, pp. 365-368. [Nowitz 80] Nowitz, D.A. and M.E.Lesk, "Implementation of a Dial-Up Network of UNIX Systems", IEEE Proceedings of Fall 1980 COMPCON, Washington, D.C., pp. 483-486. [Organick 72] Organick, E.J., The Multics System: An Examination of Its Structure", The MIT Press, Cambridge, MA, 1972. [Peachey 84] Peachey, D.R., R.B.Bunt, C.L.Williamson, and T.B.Brecht, "An Experimental Investigation of Scheduling Strategies for UNIX", Performance Evaluation Review, 1984 SIGMETRICS Conference on Measurement and Evaluation of Computer Systems, Vol. 12(3), August 1984, pp. 158-166. [Peterson 83] Peterson, James L. and A.Silberschatz, Operating System Concepts, Addison-Wesley, Reading, MA, 1983. [Pike 84] Pike, R., "The Blit: A Multiplexed Graphics Terminal", AT&T Bell Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8, Part 2, pp. 1607-1632. 421 [Pike 85] Pike, R., and P.Weinberger, "The Hideous Name", Proceedings of the USENIX Conference, Summer 1985, pp. 563-568. [Postel 80] Postel, J. (ed.), "DOD Standart Transmission Control Protocol", ACM Computer Communication Review, Vol. 10, No. 4, Oct. 1980, pp. 52-132. [Postel 81] Postel, J., C.A.Sunshine, and D.Cohen, "The ARPA Internet Protocol", Computer Networks, Vol. 5, No. 4, July 1981, pp. 261-271. [Raleigh 76] Raleigh, T.M., "Introduction to Scheduling and Switching under UNIX", Proceedings of the Digital Equipment Computer Users Society, Atlanta, Ga., May 1976, pp. 867-877. [Richards 69] Richards, M., "BCPL: A Tool for Compiler Writing and Systems Programming", Proc. AFIPS SJCC 34, 1969, pp. 557-566. [Ritchie 78a] Ritchie, D.M. and K.Thompson, "The UNIX Time-Sharing System", The Bell System Technical Journal, July-August 1978, Vol. 57, No. 6, Part 2, pp. 1905-1930. [Ritchie 78b] Ritchie, D.M., "A Retrospective", The Bell System Technical Journal, July-August 1978, Vol. 57, No. 6, Part 2, pp. 1947-1970. [Ritchie 81] Ritchie, D.M. and K.Thompson, "Some Further Aspects of the UNIX Time-Sharing System", Mini-Micro Software, Vol. 6, No. 3, 1981, pp. 9-12. [Ritchie 84a] Ritchie, D.M., "The Evolution of the UNIX Time- sharing System", AT&T Bell Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8, Part 2, pp. 1577-1594. [Ritchie 84b] Ritchie, D.M., "A Stream Input Output System", AT&T Bell Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8, Part 2, pp. 1897-1910. [Rochkind 85] Rochkind, M.J., Advanced UNIX Programming, Prentice-Hall, 1985. [Saltzer 66] Saltzer, J.H., Traffic Control in a Multiplexed Computer System, Ph.D. Thesis, MIT, 1966. [Sandberg 85] Sandberg, R., D.Goldberg, S.Kleiman, D.Walsh, and B.Lyon, "Design and Implementation of the Sun Network Filesystem", Proceedings of the USENIX Conference, Summer 1985, pp. 119-131. [SVID 85] System V Interface Definition, Spring 1985, Issue 1, AT&T Customer Information Center, Indianapolis, IN. [System V 84a] UNIX System V User Reference Manual. [System V 84b] UNIX System V Administrator's Manual. [Thompson 74] Thompson, K. and D.M.Ritchie, "The UNIX Time-Sharing System", Communications of the ACM, Vol. 17, No. 7, July, 1974, pp. 365-375 (ispravleno i perepechatano v [Ritchie 78a]). [Thompson 78] Thompson, K., "UNIX Implementation", The Bell System Technical Journal, Vol. 57, No. 6, Part 2, July- August, 1978, pp. 1931-1946. [Weinberger 84] Weinberger, P.J., "Cheap Dynamic Instruction Counting", The AT&T Bell Laboratories Technical Journal, Vol. 63, No. 6, Part 2, October 1984, pp. 1815-1826. 422

Last-modified: Thu, 12 Feb 1998 07:21:04 GMT
Ocenite etot tekst: