PRILOZHENIE. SISTEMNYE OPERACII
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
______________________________
#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.
______________________________
#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).
______________________________
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.
______________________________
#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.
______________________________
pause()
Funkciya pause priostanavlivaet vypolnenie tekushchego processa do polucheniya
signala.
______________________________
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.
______________________________
#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
______________________________
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.
______________________________
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(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.
______________________________
#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.
______________________________
#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.
______________________________
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.
______________________________
setpgrp()
Funkciya setpgrp priravnivaet znachenie identifikatora gruppy, k kotoroj
prinadlezhit tekushchij process, znacheniyu identifikatora samogo processa i vozv-
rashchaet novoe znachenie identifikatora gruppy.
______________________________
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.
______________________________
#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
______________________________
#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.
______________________________
#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.
______________________________
#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(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.
______________________________
sync()
Funkciya sync vygruzhaet soderzhashchuyusya v sistemnyh buferah informaciyu (ot-
nosyashchuyusya k fajlovoj sisteme) na disk.
______________________________
time(tloc)
416
long *tloc;
Funkciya time vozvrashchaet sistemnoe vremya v sekundah ot 00:00:00 1 yanvarya
1970 goda po Grinvichu.
______________________________
#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 */
};
______________________________
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)
______________________________
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
______________________________
umount(specialfile)
char *specialfile
Funkciya umount vypolnyaet demontirovanie fajlovoj sistemy, raspolozhennoj
na ustrojstve vvoda-vyvoda blokami specialfile.
______________________________
#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 */
};
______________________________
unlink(filename)
char *filename;
Funkciya unlink udalyaet iz kataloga zapis' ob ukazannom fajle.
______________________________
#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 */
};
______________________________
#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_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(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
[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