a.Inoduri

Inodurile există într-o formă statică pe disc, iar pentru a le prelucra, nucleul le citeşte în memoria internă. Inodurile din memorie sunt numite in-core inoduri.?identificatorul de proprietate asupra fişierului. Proprietatea este împărţită între un proprietar individual şi un grup de proprietari şi defineşte setul de utilizatori care au drepturi de acces la fişier. Superutilizatorul are acces direct la toate fişierele din sistem; ? tipul fişierului. Fişierele pot fi de tip regulat, director, speciale (caracter sau bloc), sau pipe (FIFO);? permisiunile de acces la fişier. Pentru protecţie, sistemul împarte utilizatorii unui fişier în trei clase: proprietarul, grupul proprietarului fişierului şi alşi utilizatori. Fiecare clasă are drepturi de acces pentru: citirea, scrierea şi execuţia unui fişier, iar acestea pot fi setate individual. Întrucât un director nu pot fi executat, permisiunea de execuţie conferă dreptul de a căuta în el un nume de fişier;?timpii de acces la fişier. Conţin timpul la care fişierul a fost modificat ultima datã, timpul când a fost accesat ultima dată, respectiv timpul când inodul a fost modificat ultima dată;? timpii de acces la fişier. Conţin timpul la care fişierul a fost modificat ultima datã, timpul când a fost accesat ultima dată, respectiv timpul când inodul a fost modificat ultima dată;? numărul de legături ale fişierului. Reprezintă numărul de nume pe care fişierul le are în cadrul ierarhiei de directoare. Capitolul 5 va prezenta detaliat legarea fişierelor;?tabela de conţinut (localizare) a fişierului pe disc. Conþine adresele disc unde pot fi regăsite datele fişierului. Deşi utilizatorii tratează datele din fişier ca un şir logic de octeţi, nucleul salvează datele în blocuri disc discontinue. Inodul identifică blocurile de pe disc care conþin datele fişierului;Exemplu de inod disc: owner mjb |
group os |
type regular file |
perms rwxr-xr-x |
accesed oct 23 1994 1:45 PM |
modified oct 22 1994 10:30 AM |
inod oct 23 1994 1:30 PM |
size 6030 bytes |
disk addresses |


a.Alg bread

algoritm bread /* citire bloc */
intrare: numгrul blocului din sistemul de fi?iere;
ie?ire: buffer conюinвnd date;
{
obюine buffer pentru bloc (algoritm getblk);
if (datele din buffer sunt valide)
return (buffer);
iniюiazг operaюia de citire a discului;
sleep (pвnг la оncheierea operaюiei de citire)
return (buffer);
}
modulele de nivel оnalt ale nucleului (cum ar fi subsistemul de fi?iere) pot anticipa necesitatea unui al doilea bloc disc cвnd un proces cite?te secvenюial un fi?ier. Modulele solicitг a doua operaюie asincronг de I/O оn speranюa cг datele vor fi оn memorie cвnd va fi nevoie de ele, sporind astfel performanюele sistemului. Pentru a realiza aceasta, nucleul executг algoritmul de citire оn avans a blocului, breada .Cвnd este trezit, procesul оntoarce bufferul pentru primul bloc ?i nu-l intereseazг cвnd se terminг operaюiile de I/O pentru al doilea bloc. Cвnd operaюiile de I/O pentru al doilea bloc s-au terminat, controlerul de disc оntrerupe sistemul; rutina de tratare a оntreruperii recunoa?te cг operaюiile de I/O au fost asincrone ?i elibereazг bufferul (algoritmul brelse).


b.Antetul unui buffer

Pe timpul iniţializării sistemului nucleul alocă spaţiu pentru un număr de buffere în concordanţă cu dimensiunea memoriei şi performanţele sistemului. Un buffer constă din două părţi: o zonă de memorie care conţine date de pe disc şi un antet (header) prin care se identifică bufferul. Deoarece este o corespondenţă bijectivă între antet şi zona de date, prin buffer se vor referi în continuare ambele componente, contextul urmând să clarifice la care anume se face referirea.
Datele dintr-un buffer corespund datelor dintr-un bloc disc logic al unui sistem de fişiere, iar nucleul determină apartenenţa conţinutul bufferului prin examinarea câmpurilor de identificare din antet. Bufferul este copia din memoria internă a blocului disc. Asocierea dintre conţinutul blocului disc şi buffer este temporară (până când nucleul decide să asocieze bufferului alt bloc). Un bloc disc nu poate fi asociat simultan mai multor buffere. Dacă două buffere ar conţine date corespunzătoare unui bloc disc, nucleul nu ar şti care buffer conţine datele curente şi ar putea rescrie incorect datele înapoi pe disc. De exemplu, să presupunem că un bloc disc este asociat bufferelor, A şi B. Dacă nucleul scrie date mai întâi în bufferul A şi apoi în bufferul B, blocul disc trebuie să conţină informaţiile din bufferul B. ïn cazul în care se va scrie pe disc întâi bufferul B, iar apoi bufferul A, blocul disc va conţine date incorecte.Antetul conţine de asemenea un pointer la zona de date pentru buffer, a cărei dimensiune trebuie să fie cel puţin egală cu cea mai mare dimensiune a unui bloc disc, şi un câmp de stare care prezintă starea curentă a bufferului. Starea unui buffer este o combinaţie a următoarelor informaţii:>>? bufferul este momentan blocat (pentru aceasta vor fi folosiţi termenii "blocat " şi "ocupat ", ca şi "liber " şi " deblocat " pentru starea opusă);>>? bufferul conţine date valide;>>? nucleul trebuie să scrie conţinutul bufferului pe disc înainte de reasignarea bufferului; această condiţie este cunoscută ca "delayed-write"(scriere întârziată);>>? nucleul citeşte sau scrie conţinutul bufferului pe disc, buffer în lucru;


b.Alg breada

algoritm breada /* citire bloc ?i citire оn avans */
intrгri: (1) numгrul blocului din sistemul de fi?iere pentru citire imediatг;(2) numгrul blocului din sistemul de fi?iere pentru citire asincronг;
ie?ire: buffer cu date din citirea imediatг;
{
if (primul bloc nu este оn memoria cache);
{
obюine buffer pentru blocul (1) (algoritm getblk);
if (datele din buffer nu sunt valide)
iniюiazг citirea de pe disc;
}
if (blocul (2) nu este оn memoria cache)
{
obюine buffer pentru al doilea bloc (algoritm getblk);
if (datele din buffer sunt valide)
elibereazг bufferul (algoritm brelse);
else
iniюiazг citirea de pe disc;
}
if (blocul (1) era iniюial оn memoria cache)
{
cite?te blocul (1) (algoritmul bread);
return buffer;
}
sleep (pвnг cвnd primul buffer alocat conюine date valide);
return buffer;
}
Nucleul informeazг driverul de disc cг are un buffer al cгrui conюinut ar trebui scris, iar driverul planificг blocul pentru operaюii de I/O. Dacг scrierea este sincronг, procesul apelant se pune оn a?teptare pвnг la terminarea operaюiilor de I/O, iar la trezire elibereazг bufferul. Dacг scrierea este asincronг, nucleul оncepe scrierea pe disc, dar nu a?teaptг terminarea acesteia. Nucleul va elibera bufferul la terminarea operaюiilor I/O.


c.Alg bwrite

algoritm bwrite /* scriere bloc */
intrare: buffer;
ie?ire: niciuna;
{
iniюiazг scrierea pe disc;
if (operaюiile de I/O sunt sincrone)
{
sleep (pвnг la terminarea operaюiilor de I/O);
elibereazг bufferul (algoritm brelse);
}
else if (bufferul este marcat pentru scriere оntвrziatг)
marcheazг bufferul sг fie pus оn capul FLB;
}
O scriere оntвrziatг este diferitг de o scriere asincronг. Cвnd are loc o scriere asincronг, nucleul оncepe imediat operaюia cu discul, dar nu a?teaptг ca ea sг se termine. La o scriere оntвrziatг, nucleul amвnг scrierea pe disc cвt se poate de mult, iar apoi, urmвnd al treilea scenariu din algoritmul getblk, marcheazг bufferul ca "vechi" ?i scrie asincron blocul pe disc. La оncheiarea operaюiei, controlerul de disc оntrerupe sistemul ?i elibereazг bufferul (folosind algoritmul brelse) care este pus оn capul FLB, deoarece era marcat "vechi". Din cauza celor douг operaюii de I/O asincrone, citirea blocului оn avans ?i scrierea оntвrziatг, nucleul poate invoca algoritmul brelse dintr-o rutinг de tratare de оntrerupere. Din aceastг cauzг, el trebuie sг blocheze оntreruperile оn orice procedurг care manipuleazг FLB deoarece brelse plaseazг bufferele оn aceastг listг.


b.Inoduri.

Copia din memoria internă a unui inod conţine câmpurile unui inod disc plus următoarele:
?starea inodului din memoria internă, indică dacă:
?inodul este blocat;
?un proces aşteaptă deblocarea inodului;
?reprezentarea din memoria internă a inodului diferă de copia de pe disc ca rezultat al schimbării datelor în inod;
?reprezentarea din memoria internă a fişierului diferă de copia de pe disc ca urmare a schimbării datelor în fişier;
?fişierul este un punct de montare (mount point);
?numărul de dispozitiv logic al sistemului de fişiere care conţine fişierul;
?numărul inodului. Deoarece inodurile sunt stocate pe disc într-un şir, nucleul identifică numărul inodului disc cu poziţia sa în şir. Astfel, inodul disc nu are nevoie de acest câmp;
?pointeri către alte inoduri din memoria internă. Nucleul organizează inodurile din memorie în structuri de tip liste hq (hash queues) şi free list (lista inodurilor libere, prescurtată FLI), similare celor descrise pentru buffere în capitolul anterior. Inodurile se pot găsi simultan şi într-o listă hq şi în FLI. O listă hq este identificată dupã numărul de dispzitiv logic al inodului şi după numărul inodului. Nucleul poate conţine în memoria internă cel mult o copie a unui inod disc;
?contorul de referinţă, indică numărul instanţieri active ale fişierului (de câte ori a fost deschis). Cea mai mare diferenţă dintre un inod din memoria internă şi un antet de buffer o constituie contorul referinţă (prezent la inodul din memoria internă) care contorizează instanţele active ale unui fişier. Un inod este activ când un proces îl alocă (la deschiderea unui fişier). Inodul este în FLI numai dacă contorul său de referinţă este 0, ceea ce însemnă cã nucleul îl poate realoca unui alt inod disc. FLI se constituie astfel, ca un cache al inodurilor inactive.


a.Alg iget

intrare: număr inod din sistemul de fişiere
ieşire: inod blocat
{
while (execuţia nu s-a încheiat)
{
if (inodul este în cache)
{
if (inodul este blocat)
{
sleep (până la deblocarea inodului);
continue; /* salt la while */
}
/* execuţie specială în cazul în care este punct de montare (Capitolul 5) */ if (inodul este în FLI)
şterge inodul din FLI;
incrementează contorul de referinţă al inodului;
return (inod);
}
/* inodul nu este în cache-ul de inoduri (listele hq) */
if (nu este nici un inod în FLI)
return (eroare);
şterge noul inod din FLI;
resetează numărul inodului şi sistemul de fişiere;
şterge inodul din vechea listă hq, plasează-l în cea nouă;
citeşte inodul de pe disc (algoritm bread);
iniþializează inodul (de exemplu, contorul=1);
return (inod);
}
}
Nucleul identifică un anumit inod după sistemul de fişiere din care face parte şi numãrul inodului. La cererea algoritmilor de nivel mai înalt, algoritmul iget alocă o copie în memoria internă pentru un inod.Nucleul asociază numărului dispozitivului şi numărul inodului o listă hq în care se va face căutarea inodului. Dacă nucleul nu găseşte inodul, el alocă unul din FLI şi-l blochează. Apoi pregăteşte citirea copiei disc în inodul alocat. Pe baza numărului inodului şi a numărului dispozitivului logic (cunoscute), nucleul calculează blocul logic de pe disc care conţine inodul ţinând seamă de numărul de inoduri ce pot încape într-un bloc disc.


b.Alg iget

Calculul se face după formula:
număr_bloc = [(număr_inod-1)/număr_inoduri_per_bloc] + blocul_de_start_al_listei_de_inoduri ;
unde operaţia de împărţire returneazã partea întreagă a rezultatului. De exemplu, presupunând cã blocul 2 este blocul de început al listei de inoduri şi că sunt 8 inoduri per bloc, atunci inodul numărul 8 este în blocul disc numărul 2, iar inodul 9 este în blocul disc numărul 3. Când nucleul cunoaşte dispozitivul şi numărul blocului disc, el citeşte blocul utilizând algoritmul bread, şi utilizează următoarea formulă pentru a calcula offsetul inodului din bloc:
offset = [(număr_inod - 1) modulo (număr? _de_ inoduri_ per_ bloc)] * dimensiunea_inodului_disc ;
De exemplu, dacă fiecare inod disc ocupă 64 octeţi şi sunt 8 inoduri per bloc disc, atunci inodul numărul 8 începe de la offsetul 448 din blocul disc. Nucleul şterge inodul din FLI, îl plasează în lista hq corespunzătoare şi setează contorul de referinţă pe 1. Apoi copiază din inodul disc în cel din memorie tipul fişierului, câmpurile de proprietate, permisiunile de acces, numărul de legături, dimensiunea fişierului şi tabela de localizare, şi returnează inodul blocat.
Nucleul manipulează flagul de blocare şi contorul de referinţă din inod în mod independent. Blocarea se realizează în timpul execuţiei unui apel sistem pentru a împiedica accesarea inodului de cãtre alte procese, pe durata cât este utilizat. Nucleul deblochează inodul la încheierea apelurilor sistem, el nefiind niciodată blocat între apelurile sistem. În acest fel se permite proceselor accesul simultan la fişiere. Nucleul incrementează contorul de referinţă pentru fiecare referinţă activă la fişier. El decrementează contorul de referinţă numai dacă referinţa devine inactivă (când un proces închide fiçierul). Contorul de referinţă rămâne setat între apelurile sistem, împiedicând nucleul să realoce un inod activ. Astfel, nucleul poate bloca şi debloca un inod alocat independent de valoarea contorului de referinţă. Astfel, dacă în cazul bufferului cache termenii deblocat şi eliberat aveau aceeaşi semnificaţie, la inoduri ei au semnificaţie aparte. Termenul eliberat (precum şi cel ce desemneazã starea opusă, alocat) este asociat contorului de referinţă, iar deblocat (cât şi blocat) flagului de blocare.


c.Alg iput

algoritm iput /* eliberează un inod */
intrări: pointer la un inod din memorie
ieşiri: niciuna
{
blochează inodul dacă nu este deja blocat;
decrementează contorul de referinţă;
if (contorul de referinţă == 0)
{
if (contorul de legături == 0)
{
eliberează blocurile disc ale fişierului (algoritm free);
setează tipul fişier la 0;
eliberează inod(algoritm ifree);
}
if (fişierul a fost accesat sau inodul modificat sau fişierul modificat)
actualizează conţinutul inodului disc;
pune inodul în FLI;
}
deblochează inodul;
}
Când nucleul eliberează un inod , el decrementează contorul referinţă. Dacă contorul ajunge la 0, nucleul scrie inodul pe disc dacã copia din memorie diferă de cea de pe disc. Ele diferă în cazul în care au fost modificate datele din fişier, timpul de acces la fişier, proprietarul sau permisiunile de acces. Nucleul plasează inodul în FLI pentru a putea fi realocat unui alt fişier. În cazul în care numărul de legături ale fişierului devine 0 (fişierul este şters), nucleul va elibera toate blocurile disc asociate fişierului


b.Alg namei

algoritm namei /* converteşte nume cale într-un inod */
intrare: nume cale
ieşire: inod blocat
{
if (numele căii începe din rădăcină)
inod de lucru = inodul rădăcină (algoritm iget );
else
inod de lucru = inodul directorului curent (algoritm iget );
while (mai sunt componente neparcurse)
{
citeşte următoarea componentă din nume cale;
verifică dacă inodul de lucru este al unui director, permisiunile de acces în regulă;
if (inodul în lucru este al rădăcinii şi componenta este "..")
continue;
citeşte directorul (inodul de lucru) prin folosirea repetată a algoritmilor
bmap, bread şi brelse;
if (componenta se potriveşte cu numele unei intrări în director (inodul de lucru))
{
citeşte numărul inodului din intrarea corespunzătoare componentei identificate;
eliberează inodul de lucru (algoritm iput );
inodul de lucru = inodul componentei din intrare (algoritm iget);
}
else /* componenta nu este în director */
return (nici un inod);
}
return (inodul de lucru);
}
|| Nucleul execută o căutare secvenţială în fişierului director asociat inodului de lucru, încercând să determine o potrivire între componenta curentă a numelui căii şi numele unei intrări în director. Pe baza offsetului (se începe cu offsetul 0) în fişierul director se determină blocul disc corespunzător (folosind algoritmul bmap) pe care-l citeşte (folosind algoritmul bread'). Tratând conţinutul blocului ca o secvenţă de intrări în director, nucleul caută o intrare care se potriveăte cu componenta curentă din numele căii. Dacă găseşte o potrivire, el înregistrează numărul inodului din intrarea respectivă, elibereazã blocul (algoritm brelse) şi vechiul inod de lucru (algoritm iput), şi alocă un inod pentru fişierul din director pentru care s-a realizat potrivirea (algoritm iget').


a.Alg bmap

alg.bmap
intrări: (1) inod
(2) offsetul
ieşiri: (1) numărul blocului în sistemul de fişiere
(2) offsetul din bloc
(3) număr de octeþi din bloc pentru operaţia de I/O
(4) număr bloc citit în avans
{
calculează numărul de bloc logic din fişier funcţie de offset;
calculează octet de start în bloc pentru operaţia I/O; /* ieşirea 2*/
calculează numărul de octeţi ce trebuie copiaţi pentru utilizator; /* ieşirea 3 */
verifică dacă se poate executa citirea în avans, marchează inodul; /* ieºirea 4 */
determină nivelul de indirectare;
while (nu s-a ajuns la nivelul de indirectare necesar)
{
calculează indexul în inod sau blocul indirect pe baza numărului de bloc logic din fişier;
determină numărul blocului disc din inod sau blocul de indirectare;
eliberează bufferul din citirea precedentă a discului, dacă este cazul (algoritm brelse);
if (nu sunt mai sunt nivele de indirectare)
return (numărul blocului);
citeşte blocul disc de indirectare (algoritm bread );
ajustează numărul de bloc logic din fişier în conformitate cu nivelul de indirectare;
}
}
Procesele accesează datele unui fişier specificând offsetul. Dacă utilizatorul vede fişierul ca pe un şir de octeţi, nucleul îl vede ca un şir de blocuri, realizând în acest sens şi o conversie. Fişierul începe de la blocul logic 0 şi continuă până la un număr de blocuri logice corespunzător dimensiunii fişierului. Nucleul accesează inodul şi converteşte blocul logic al fişierului în blocul disc corespunzător.prezintă algoritmul bmap care determină blocul disc corespunzător offsetului unui fişier.***Accesul la sistemul de fişiere este mai rapid cu cât nucleul accesează mai multe date de pe disc în decursul unei operaţii, altfel spus, cu cât dimensiunea blocurilor disc este mai mare. Folosirea blocurilor de dimensiuni mari (4 ko, 8 ko) aduce pe lângă avantajul creşterii vitezei, şi un dezavantaj: creşterea fragmentării blocurilor (mari porţiuni de spaţiu de pe disc nu pot fi utilizate). De exemplu, dacă dimensiunea blocului logic este de 8 ko, atunci un fişier de dimensiune 12 ko va folosi complet un bloc şi unul pe jumãtate. Cei 4 ko rămaşi se irosesc, deoarece nu pot fi folosiţi ca spaţiu de stocare.


a.Alg namei,Conversia de nume

Accesul iniţial la un fişier se face precizând numele căii sale (vezi apelurile sistem open, chdir şi link). Deoarece nucleul operează intern cu inoduri (şi nu cu numele căii), pentru a accesa un fişier converteşte numele căii sale în inod. Algoritmul namei analizează numele căii componentă cu componentă, convertind fiecare componentă pe baza numelui ei şi al directorului în care se execută căutarea, şi returnează eventual inodul corespunzător numelui căii date ca intrare (vezi figura 4.11).
Fiecare proces are asociat un directorul curent, iar u area sa conţine un pointer către inodul directorului curent. Directorul curent al primului proces din sistem (procesul 0) este directorul rădăcină. Directorul curent al oricărui alt proces este directorul curent al procesului părinte din momentul creării. Procesele schimbă directorul lor curent folosind apelul sistem chdir. Căutarea începe din directorul curent dacă primul caracter din cale nu este "/", altfel va începe din directorul rădăcină. În ambele situaţii nucleul găseşte uşor inodul din care începe căutarea, deoarece directorul curent se regăseşte în u area procesului, iar rădăcina sistemului este memoratã într-o variabilă globală.
Algoritmul namei utilizează inoduri intermediare în analiza a unui nume de cale, numite inoduri de lucru (working inode). Primul inod de lucru, este cel din care se începe căutarea. Pe durata fiecărui ciclu din namei, nucleul se asigură că inodul de lucru este al unui director. Altfel, sistemul ar încălca aserţiunea că numai directoarele pot fi noduri în arborele de fişiere. Procesul trebuie să aibă şi permisiunea de a căuta directorul (permisiunea de citire nu este suficientă). Procesul o are dacă identificatorul utilizator (user ID, prescurtat UID) al procesului se potriveşte cu identificatorul proprietarului sau grupului (GID) fişierului, sau dacă fişierul are setate permisiunile care să permită căutarea utilizatorilor


Superblocul

Până în punctul de faţă al acestui capitol s-a descris structura unui fişier, presupunându-se că inodul şi blocurile disc folosite de un fişier au fost deja alocate. În urmãtoale subcapitole se va prezenta modul în care nucleul alocă inoduri şi blocuri disc. Pentru a înţelege mai bine algoritmii respectivi, se va analiza în continuare structura superblocului.
Superblocul conţine urmãtoarele câmpuri:
? dimensiunea sistemului de fişiere;
? numărul blocurilor libere în sistemul de fişiere;
? o listă a blocurilor libere disponibile în sistemul de fişiere;
? indexul urmştorului bloc liber din lista blocurilor libere;
? dimensiunea listei de inoduri;
? numărul de inoduri libere în sistemul de fişiere;
? o listă cu inoduri libere în sistemul de fişiere;
? indexul următorului inod liber din lista inodurilor libere;
? câmpuri de blocare pentru lista inodurilor libere şi lista blocurilor libere;
? un flag ce indică dacă superblocul a fost modificat
Periodic, nucleul scrie pe disc superblocul în cazul în care au survenit modificări.


Alocarea unui inod la fisier

Nucleul utilizează algoritmul iget pentru a aloca un inod în memoria internă pentru un inod disc cunoscut (al cărui sistem de fişiere şi număr de inod a fost determinat anterior). În algoritmul namei, nucleul determină numãrul inodului pentru care are loc potrivirea unei componente din numele căii cu numele unui intrări într-un director. Un alt algoritm, ialloc, asignează (alocă) un inod disc unui fişier nou creat. Aşa cum s-a menţionat în capitolul 2, sistemul de fişiere conţine o listă de inoduri. Un inod este liber dacă câmpul tip are valoarea 0. Când un proces doreşte un nou inod, nucleul ar putea teoretic să caute un inod liber în lista de inoduri. Însă o astfel de căutare este neeconomică, necesitând cel puţin o operaţiune de citire (posibil de pe disc) pentru fiecare inod. Pentru îmbunătăţirea performanţei, superblocul sistemului de fişiere conţine un şir în care păstrează numere de inoduri libere din sistemul de fişiere.Pentru a evita condiţiile de concurenţă, nucleul verifică mai întâi dacă alte procese nu au blocat accesul la lista de inoduri libere din superbloc. Dacă lista cu numere de inoduri din superbloc nu este goală, nucleul asignează următorul număr de inod, alocă un inod liber în memoria internă pentru inodul disc nou asignat folosind algoritmul iget (citind inodul de pe disc dacă e necesar), copiază inodul disc În inodul din memoria internă, iniţializează câmpurile inodului şi returnează inodul blocat. Actualizează inodul disc pentru a arăta că inodul se află în folosire: o valoare diferitã de zero a câmpului din inod ce conţine tipul fişierului indică faptul că inodul disc este asignat.Dacă lista inodurilor libere din superbloc este goală, citeşte bloc cu bloc lista de inoduri de pe disc şi umple lista din superbloc cu numere de inoduri libere, memorând totodată cel mai mare număr de inod determinat. Acesta, numit şi inod memorat, este ultimul salvat în superbloc. Data următoare când nucleul va căuta inoduri libere pe disc, va utiliza ca punct de plecare inodul memorat.


a.Alg alloc

alg alloc /* alocarea unui bloc din sistemul de fi?iere */
intrare: numгrul sistemului de fi?iere
ie?ire: buffer pentru noul blocul
{
while (superblocul este blocat)
sleep (pвnг superblocul devine liber);
?terge un bloc din lista liberг din superbloc;
if (s-a ?ters ultimul bloc)
{
blocheazг superblocul;
cite?te blocul care tocmai a fost luat din lista liberг (algoritm bread );
copiazг оn superbloc numerele de bloc din blocul citit;
elibereazг bufferul alocat blocului (algoritm brelse);
deblocheazг superblocul;
treze?te procesele(care a?teaptг deblocarea superblocului);
}
obюine buffer pentru blocul ?ters din superbloc(algoritm getblk );
conюinutul bufferului este pus cu 0;
decrementeazг contorul total al blocurilor libere;
marcheazг faptul cг superblocul a fost modificat;
return buffer;
}


Alocarea blocurilor de date

Cвnd un proces scrie date оntr-un fi?ier nucleul trebuie sг aloce blocuri disc din sistemul de fi?iere (folosite ca blocuri directe de date sau ca blocuri de indirectare). Superblocul din sistemul de fi?iere conюine un ?ir оn care se pгstrazг numere de blocuri disc libere din sistemul de fi?iere. Programul utilitar mkfs (make file system) organizeazг blocurile de date ale sistemului de fi?iere оntr-o listг оnlгnюuitг, fiecare element fiind un bloc disc conюine un ?ir de numere de blocuri disc libere, iar o intrare din acest ?ir reprezintг numгrul urmгtorului bloc din lista оnlгnюuitг. Figura 4.18 prezintг un exemplu de listг оnlгnюuitг, unde primul bloc este lista liberг din superbloc, iar celгlalte blocuri din lista оnlгnюuitг conюin numere de blocuri libere.
Cвnd nucleul intenюioneazг sг aloce un bloc dintr-un sistem de fi?iere (algoritmul alloc, figura 4.19), alocг urmгtorul bloc disponibil din lista aflatг оn superbloc. Odatг alocat, blocul nu poate fi realocat pвnг cвnd el nu devine liber. Dacг blocul alocat este ultimul bloc disponibil din listг, nucleul оl trateazг ca un pointer la un bloc care conюine un ?ir de blocuri libere. El cite?te blocul, completeazг lista din superbloc cu noul ?ir de numere de blocuri, ?i apoi permite utilizarea numгrului blocului (ce a fost tratat ca pointer). El alocг un buffer pentru bloc ?i sterge datele din buffer (sunt puse pe 0). Blocul disc a fost asignat ?i nucleul are acum la dispoziюie un buffer cu care lucreazг. Dacг sistemul de fi?iere nu conюine blocuri libere, procesul apelator recepюioneazг o eroare.
Dacг un proces scrie mai multe date оntr-un fi?ier, el cere repetat sistemului blocuri pentru a stoca datele, оnsг nucleul i le alocг bloc cu bloc (nu se alocг mai multe blocuri deoadatг). Programul mkfs оncearcг sг organizeze lista оnlгnюuitг iniюialг cu numere de blocuri libere, astfel оncвt numerele de blocuri distribuite unui fi?ier sг fie unul lвngг celгlalt. Aceasta duce la mгrirea performanюelor sistemului deoarece se reduce timpul de cгutare pe disc ?i perioada оn care un proces a?teaptг citirea unui fiзier secvenюial.


a.Alg ialloc

alg ialloc /* asignează un inod */
intrare: sistemul de fişiere
ieşire: inod blocat
{
while (operaţia nu s-a încheiat)
{
if (superblocul este blocat)
{
sleep (până superblocul devine liber);
continue; /* salt la while */
}
if (lista de inoduri din superbloc este goală)
{
blochează superblocul;
determină inodul memorat folosit în căutarea inodurilor libere;
caută pe disc inoduri libere până se umple lista din superbloc sau nu mai sunt inoduri libere (algoritmi bread şi brelse );
deblochează superblocul;
trezeşte procesele ce aşteptau ca superblocul să devină liber;
if (nu s-au găsit inoduri libere pe disc)
return (nu există inod);
stabileşte valoarea inodului memorat pentru următoarea
căutare de inoduri libere;
}
/* lista inodurilor din superbloc nu e goală */
obţine un număr de inod din lista de inoduri din superbloc;
obţine inod (algoritm iget);
if (inodul nu e liber nici acum
/* a fost alocat altui fişier !!! */
{
scrie inodul pe disc;
eliberează inodul (algoritmul iput);
continue; /* salt la while */
}
/* inodul este liber */
iniþializează inod;
scrie inodul pe disc;
decrementează contorul inodurilor libere din sistemul de fişiere;


Alg ifree

Algoritmul pentru eliberarea inodurilor disc este mult mai simplu. Dupã incrementarea numãrului total de inoduri disponibile în sistemul de fiºiere, nucleul verificã dacã superblocul este blocat. Dacã este, pentru a evita condiþiile de concurenþã se încheie imediat. Numãrul inodului nu este depus în superbloc, însã poate fi gãsit pe disc ºi este disponibil pentru reasignare.
algoritm ifree /* eliberare inod */
intrare: numãr inod din sistemul de fiºiere
ieºire: niciuna
{
incrementeazã contorul inodurilor libere;
if (superblocul este blocat)
return;
if (lista de inoduri este plinã)
{
if (numãrul inodului este mai mic decât al inodului memorat)
inodul memorat pentru cãutare = numãr inod de intrare;
}
else
pune numãrul inodului în lista inodurilor libere;
return;
}
Dacă lista nu este blocată, nucleul verifică dacă mai este spaţiu în lista de inoduri, şi dacă este, plasează numărul de inod în listă după care algoritmul se încheie. Dacă lista este plină, se compară numărul inodului eliberat cu cel al inodului memorat. Dacă este mai mic, devine noul inod memorat. Vechiul inod memorat nu este pierdut, deoarece nucleul îl poate gåsi dacå cautå în lista de inoduri de pe disc. Ideal ar fi să nu existe inoduri libere ale căror numere sunt mai mici decât numărul inodului memorat, dar în realitate sunt posibile şi astfel de situaţii.


Prob.1Afisarea parametrilor in ordine inverse.2Calculul sumei parametrilor cu indice impar

Tema1
#echo script recho Afisarea parametrilor in ordine inverse
cmd""|
while test [dolar]# -gt 0|
do|
cmd"[dolar]1 [dolar]cmd"|
shift 1|
done|
echo [dolar]cmd|

Tema2|
#echo sum_odd Calculul sumei parametrilor cu indice impar|

sum=0|
while test [dolar]# -gt 0|
do|
echo -n [dolar]1|
sum='expr [dolar]sum +[dolar]1'|
if test [dolar]# -gt 2|
then shift 2; echo -n ?+?|
else echo -n "=";break|
fi|
done|
echo -n [dolar]sum|
echo ""|


prob.7sa se elaboreze un script cmp_dir care determina daca doua dir

Tema 7 |
#echo sa se elaboreze un script cmp_dir care determina daca doua directoare contin aceleasi fisiere|
dir1=[dolar]1|
dir2=[dolar]2|
var=0|
ls -A [dolar]dir1 > dir1|
ls -A [dolar]dir2 > dir2|
if cmp dir1 dir2|
then var=0|
else var=1|
fi|
if test [dolar]var -gt 0|
then echo Diferite;break|
else save ='pwd'|
chdir [dolar]1|
line='ls -A'|
for fis in [dolar]line|
do|
if test -f [dolar]fis|
then if cmp [dolar]dir1/[dolar]fis [dolar]dir2/[dolar]fis|
then echo -n ""
else echo Diferite; break
fi
else echo -n ""
fi |
done|
chdir [dolar]save|
echo egale|
fi|


prob5numarul de fisiere.6Sa se elaboreze un script

Tema 5 a|
#echo count_cpp calculeaza numarul de fisiere cpp dintr-un director primit ca parametru in doua variante|
a)Cautarea se va face doar in directorul primit ca parametru.|
b)Cautare se va face recursive in directorul parametru si in toate subdirectoarele sale|
chdir [dolar]1|
ls -A *.cpp|

Tema 6 a|
#echo find_file Sa se elaboreze un script find_file care cauta un fisier dat intr-un director in doua variante|
a)Cautarea se va face doar in directorul primit ca parametru|
b)Cautarea se va face recursive in directorul parametru si in toate subdirectoarele sale|
list='cat[dolar]1'|
echo [dolar]list|


Prob3Calculul numarului parametrilor pozitivi.4Afisarea numelui utilizatorului pe baza login-ului

Tema3|
#echo count_poz |

count=0|
while test [dolar]# -gt 0|
do|
if test [dolar]1 -gt 0|
then count='expr [dolar]count +1'|
fi|
shift 1|
done echo programul a fost apelat cu [dolar]count parametri pozitivi|

Tema4|
#echo name_loghin Afisarea numelui utilizatorului pe baza login-ului|
loghin=[dolar]1|
line='grep [dolar]loghin/etc/passwd'|
if test -n "[dolar]line"|
then|
IFS|
set [dolar]line|
#echo [dolar]5|
Nume=[dolar]5|
IFS=|
Echo [dolar]nume|
Set [dolar]nume|
Echo [dolar]1|
else|
echo "User not found"|
fi|


методы


Методы проведения обследования:

I. По цели обследования

-метод локального обследования

-метод системного обследов-я

II. По числу исполнителей

-индивидуальное обследов-е

-бригадное обследов-е

III. По степени охвата

-метод сплошного обследов-я

-метод выборочного обследов-я

IV. По степени одновременности выполнения работ

-метод последовательного выполнения работ

-метод параллельного выполнения работ

Методы сбора материала:

I. выполняемые силами проектировщиков

–метод бесед и консультаций

–метод опроса исполнителей на раб месте

-метод личного наблюдения

-метод фотографии рабочего дня

-метод хронометража отдельн работ

-метод анализа операций

-расчетный метод

-метод аналогии

II. выполняемые силами специалистов предметной области

-метод ведения индивидуальных тетрадей-дневников

-метод документной инвентаризации

-метод самофотографии рабочего дня


обследов


Обследование – это изучение и анализ организационной структуры предприятия, его деят-ти и

суще-ствующей технологии обработки инф-ии.

Обследование предполагает:

-определение стратегии внедрения ИС

-детальный анализ деят-ти организации

По рез-м обследования составл-ся перечень ф-ий, кот необходимо автоматизировать и

очередность их разработки.

Планируемые ф-ии следует классифицировать по степени их важности. Классификация (MusCoh)

пла-нируемых ф-ии:

1-необходимые Must Have

2-желательные Should Have

3-возможные Could Have

4-отсутствующие ф-ии Won’t Have

В рез-те проведения обследов-я составл-ся документ «Техническое задание»:

Разделы:

1-общие сведения а проекте

2-назначение, цели создания сист

3-хар-ка объекта автоматизации

4-требов-я к сист

5-состав и содержание работ по созданию сист

6-порядок контроля приемки системы

7-требов-я к составу и содержанию работ




тех


1.Предпроектная стадия

2 этапа:

1-обследование объекта

2-разработка технико-экономич обоснования и технического задания.

Обследование – это изучение и анализ организационной структуры предприятия, его деят-ти и

суще-ствующей технологии обработки инф-ии.

2. Стадия проектирования

1 этап – техническое проектирование (логич разработка и выбор наилучш вариант проектных

реше-ний)

2 этап – рабочее проектирование (физ реализация выбранного проекта)

Техническое проектирование: Сначала уточняются цели создания ИС, устанавливается взаимосвязь

с др системами, уточняется и при необходимости изменяется организационная структура

предприятий.

Рабочее проектирование: На этом этапе осущ-ся техническая реализация выбранных решений

3. Стадия внедрения и стадии эксплуатации и сопровождения проекта.

Стадия внедрения:

Методы:

1-последовательный (Недостатки: увелич-ся длительность внедрения-> растет стоимость

проекта) по-степенно внедряется одна подсистема за другой, одна задача за другой.

2-параллельный метод (Нед: возникает возможность пропуска ошибок в проектной документации)

3-смешанный метод

Внедрение проекта осущ-ся в теч 3-х этапов:

1 этап – подготовка объекта к внедрению (измен-ся организационная структура объекта, набир-ся

кад-ры соответствующей квалификации, выполняется закупка и установка выч. техники,

устанавлив-ся ср-ва сбора и регистрации первичной инф-ии и передача по каналам связи, осущ-

ся создание файлов ин-формац базы с нормативно-справочной информацией).

2 этап – опытное внедрение проекта (частичная проверка проекта)

3 этап – сдача проекта в промышленную эксплуатацию (комплексная проверка проекта).

4. Стадия эксплуатации и сопровождения проекта:

Сначала решается вопрос о том, чьими силами (заказчика или разработчика) будет осуществляться

эксплуатация и сопровождение проекта.

1 этап – эксплуатация проекта (исправление в работе ИС и накопление статистики о кач-ве работы,

регистрация сбоя в журналах)

2 этап – сопровождение и модернизация проекта (анализ статистического материала и при

необходи-мости модернизация проекта).




Средства проектирования:


I. Без использования ЭВМ

-стандарты проектирования

-единая система классификации и кодирования

-унифицированные системы доументации

-модели описания и анализа потоков информации

II. С использованием ЭВМ

-операц ср-ва поддержки операций обработки инф-ии

-ср-ва проектирования отделных компонентов ИС

-функциональные ср-ва проектир-я

-ср-ва автоматизации проектир-я




Проект


Проект ИС – это совокупность документации, в кот представлена описание проектных решений по

созданию и эксплуатации ИС в конкретной программной технической среде.

Объектами проектирования явл-ся:

1-задачи упр-я

2-комплексы задач

3-функции упр-я

4-элементы технического обеспечения

5-элементы прогр обеспеч-я и т.д.

Субъекты проектирования:

1-проектная организация

2-организация-заказчик

Технология проектирования-это совок-ть методов и ср-в проетир-я, а также совокупность

методов и ср-в организации проектир-я

Классификация методов проектирования:

I. по степени автоматизации

1-метод ручного проектирования

2-метод компьют проектирования

II. по степени исп-я типов проектных решений

1-метод оригинального проектирования

2-метод типового проектирования

III. по степени адаптивности проектных решений

1-метод реконструкции (адаптация путем программирования)

2-метод параметризации (адаптация путем перенастройки параметров)

3-метод реконструкции (изменения модели проблемной области)




Классификация ИС:


I. по типу хранимых данных

1-фактографические системы (хранение и обработка структурированных данных) числа, отд

символы

2-документальные системы (хранение и поиск неструктурированных данных в виде документов)

II. по степени автоматизации

1-ручные ИС

2-автоматические ИС

3-автоматизированные ИС

III. по характеру обработки данных

1-информационно-поисковые сист (только поиск инф-ии)

2-информационно-решающие сист (преобраз-е данных)

-управляющие

-советующие

IV. по сфере применения

1-ИС организационного упр-я (автоматизация функций управ персонала)

2-ИС упр-я технологией пр-ва (автоматизация ф-ий произв персонала)

3-ИС автоматизированного проектир-я (автоматизация ф-ий инженеров-проектировщиков,

конструк-торов и т.д.)

4-интегрированные (корпоративные) ИС (автоматизация всех ф-ий организации)

V. по уровню управления

1-сист обработки данных (СОД) (регистрация и обработка событий)

2-инф сист упр-я (ИСУ) (формирование сводных документов)

3-сист поддержки принятия решений (СППР) (формирование стратегических целей)




Основные понятие ИС.


Система- это совок-ть взаимосв объектов, функционирующих совместно для достиж-я общих

целей.

В процессе функционир-я для системы характерно изменения состояния объектов.

Процесс упр-я системой – это направленное воздействие на элементы системы для достижения

цели.

Процесс упр-я представл-ся в виде информац процесса, кот связывает 3 элемента:

1-внешнюю среду

2-систему упр-я

3-объекты упр-я

Объекты упр-я:

-материальные элементы (люди, технич ср-ва, сырье, мат-лы)

-производственные процессы

Система упр-я:

-совокупность структурных подразделений

Ф-ии: - планирование, учет, контроль, оперативное регулир-е, анализ

Планирование – определ-е целей функционирования объекта

Учет – фиксир-е показателей, кот есть на данный момент

Контроль – выявление отклонений запланирован показателей от существующих

Анализ – выявление ошибок

Информационная система – совокупность организационных, технических, программных и

информа-цион ср-в с целью сбора, хранения, обработки и выдачи информации для выполнения

функций упр-я

Информационный поток – направленное движ-е информации, при условии, что у нее есть общий

ис-точник и общий приемник




Способы доступа и организации файлов


С точки зрения внутренней структуры (логической организации) файл - это совокупность однотипных записей, каждая из которых информирует о свойствах одного объекта. Записи могут быть фиксированной длины, переменной длины или неопределенной длины. Записи переменной длины в своем составе содержат длину записи, а неопределенной длины – специальный символ конца записи.

При этом каждая запись может иметь идентификатор, представляющий собой ключ, который может быть сложным и состоять из нескольких полей.

Существует три способа доступа к данным, расположенным во внешней памяти:

1. Физически последовательный по порядку размещения записи в файле.

2. Логически последовательный в соответствии с упорядочением по значению ключей. Для выполнения упорядочения создается специальный индексный файл, в соответствии с которым записи представляются для обработки.

3. Прямой - непосредственно по ключу или физическому адресу записи.

Для организации доступа записи должны быть определенным образом расположены и взаимосвязаны во внешней памяти. Есть несколько способов логической организации памяти.

Последовательный

Записи располагаются в физическом порядке и обеспечивают доступ в физической последовательности. Таким образом, для обработки записи с номером N+1 необходимо последовательно обратиться к записям с номером 1, 2,….,N. Это универсальный способ организации файла периферийного устройства. Используется так же для организации входного/выходного потока.

Индексно-последовательный.

Записи располагаются в логической последовательности в соответствии со значением ключей записи. Физически записи располагаются в различных местах файла. Логическая последовательность файла фиксируется в специальной таблице индексов, в которой значение ключей связывается с физическим адресом записи. При такой организации доступ к записям осуществляется логически последовательно в порядке возрастания или убывания значения ключа или по значению ключа.

Индексный

Место записи в файле, ее физический адрес, определяется алгоритмом преобразования для ключа. Доступ к записям возможен только прямой. Алгоритм преобразования ключа называется хешированием. Ключ, использующий алгоритм хеширования, преобразуется в номер записи.

Прямой.

Это организация, при которой осуществляется прямой доступ по порядковому номеру записи или по физическому адресу.

Библиотечный

Организация, в которой файл состоит из последовательных подфайлов (разделов), первый из которых является оглавлением и содержит имена и адреса остальных подфайлов. При такой организации осуществляется комбинированныйдоступ: индексный прямой к разделу и последовательный в разделах.

Определить права доступа к файлу - значит определить для каждого пользователя набор операций, которые он может применить к данному файлу. В разных файловых системах может быть определен свой список дифференцируемых операций доступа. Этот список может включать следующие операции:

• создание файла;

• уничтожение файла;

• открытие файла;

• закрытие файла;

• чтение файла;

• запись в файл;

• дополнение файла;

• поиск в файле;

• получение атрибутов файла;

• установление новых значений атрибутов;

• переименование;

• выполнение файла;

• чтение каталога;

• и другие операции с файлами и каталогами.

В самом общем случае права доступа могут быть описаны матрицей прав доступа, в которой столбцы соответствуют всем файлам системы, строки - всем пользователям, а на пересечении строк и столбцов указываются разрешенные операции. В некоторых системах пользователи могут быть разделены на отдельные категории. Для всех пользователей одной категории определяются единые права доступа. Например, в системе UNIX все пользователи подразделяются на три категории: владельца файла, членов его группы и всех остальных. Различают два основных подхода к определению прав доступа:

• избирательный доступ, когда для каждого файла и каждого пользователя сам владелец может определить допустимые операции;

• мандатный подход, когда система наделяет пользователя определенными правами по отношению к каждому разделяемому ресурсу (в данном случае файлу) в зависимости от того, к какой группе пользователь отнесен.


Пользовательский слой программного обеспечения


Хотя большая часть программного обеспечения ввода-вывода находится внутри ОС, некоторая его часть содержится в библиотеках, связанных с пользовательскими программами. Системные вызовы, включающие вызовы ввода-вывода, обычно делаются библиотечными процедурами. Если программа, написанная на языке С, содержит вызов count = write (fd, buffer, nbytes), то библиотечная процедура write будет связана с программой. Набор подобных процедур является частью системы ввода-вывода. В частности, форматирование ввода или вывода выполняется библиотечными процедурами. Примером может служить функция printf языка С, которая принимает строку формата и, возможно, некоторые переменные в качестве входной информации, затем строит строку символов ASCII и делает вызов write для вывода этой строки. Стандартная библиотека ввода-вывода содержит большое число процедур, которые выполняют ввод/вывод и работают как часть пользовательской программы.

Другой категорией программного обеспечения ввода/вывода является подсистема спулинга (spooling). Спулинг - это способ работы с выделенными устройствами в мультипрограммной системе. Рассмотрим типичное устройство, требующее спулинга - строчный принтер. Хотя технически легко позволить каждому пользовательскому процессу открыть специальный файл, связанный с принтером, такой способ опасен из-за того, что пользовательский процесс может монополизировать принтер на произвольное время. Вместо этого создается специальный процесс - монитор, который получает исключительные права на использование этого устройства. Также создается специальный каталог, называемый каталогом спулинга. Для того чтобы напечатать файл, пользовательский процесс помещает выводимую информацию в этот файл и помещает его в каталог спулинга. Процесс-монитор по очереди распечатывает все файлы, содержащиеся в каталоге спулинга.

В ОС MS-DOS стандартный набор ПУ поддерживается базовой системой ввода/вывода (БСВВ), расположенной в ПЗУ, в числе прочих задач выполняет функции обслуживания системных вызовов и прерываний. Дополнительные устройства MS-DOS поддерживаются модулем расширенной системы ввода/вывода, посредством перечисления в файле конфигурации CONFIG.SYS дополнительных драйверов в формате команды

DEVICE = [ путь ] имя файла [ параметры]






































Обработка прерываний периферийных устройств


Обработка прерываний

Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Наилучший способ состоит в разрешении процессу, инициировавшему операцию ввода-вывода, блокировать себя до завершения операции и наступления прерывания. Процесс может блокировать себя, используя, например, вызов DOWN для семафора, или вызов WAIT для переменной условия, или вызов RECEIVE для ожидания сообщения. При наступлении прерывания процедура обработки прерывания выполняет разблокирование процесса, инициировавшего операцию ввода-вывода, используя вызовы UP, SIGNAL или посылая процессу сообщение. В любом случае эффект от прерывания будет состоять в том, что ранее заблокированный процесс теперь продолжит свое выполнение.

44. Драйверы устройств

Драйверы устройств

Драйвером устройства называется программа управления функционированием периферийными устройствами, которая выполняет следующие функции:

• управление интерфейсом контроллера ПУ;

• обработку передаваемых через супервизор прерываний;

• обнаружение и обработка ошибок.

Весь зависимый от устройства код помещается в драйвер устройства. Каждый драйвер управляет устройствами одного типа или, может быть, одного класса. В операционной системе только драйвер устройства знает о конкретных особенностях какого-либо устройства. Например, только драйвер диска имеет дело с дорожками, секторами, цилиндрами, временем установления головки и другими факторами, обеспечивающими правильную работу диска.

Драйвер устройства принимает запрос от супервизора или программного слоя и решает, как его выполнить. Типичным запросом является чтение n блоков данных. Если драйвер был свободен во время поступления запроса, то он начинает выполнять запрос немедленно. Если же он был занят обслуживанием другого запроса, то вновь поступивший запрос присоединяется к очереди уже имеющихся запросов, и он будет выполнен, когда наступит его очередь. С точки зрения пользователя, драйверы являются невидимыми, так как пользователи получают доступ к вводу/выводу через супервизор с применением функций и команд ввода/вывода используемых систем программирования.

Первый шаг в реализации запроса ввода-вывода, например, для диска, состоит в преобразовании его из абстрактной формы в конкретную. Для дискового драйвера это означает преобразование номеров блоков в номера цилиндров, головок, секторов, проверку, работает ли мотор, находится ли головка над нужным цилиндром. Короче говоря, он должен решить, какие операции контроллера нужно выполнить и в какой последовательности.

После передачи команды контроллеру драйвер должен решить, блокировать ли себя до окончания заданной операции или нет. Если операция занимает значительное время, как при печати некоторого блока данных, то драйвер блокируется до тех пор, пока операция не завершится, и обработчик прерывания не разблокирует его. Если команда ввода-вывода выполняется быстро (например, прокрутка экрана), то драйвер ожидает ее завершения без блокирования. Драйверы могут работать с периферийными устройствами тремя основными способами:

• по опросу готовности;

• по прерываниям;

• по прямому доступу к памяти.

По опросу готовности драйвер выполняет следующие действия:

1. Запрещает прерывания от устройства и инициирует операцию на устройстве.

2. Переходит в состояние ожидания.

3. Циклически проверяет завершенность операции.

4. Дождавшись завершения операции, проверяет отсутствие ошибки при ее выполнении, разрешает прерывания и возвращает управление прерванному процессу.

По опросу готовности реализуется синхронный ввод/вывод, при котором отсутствует параллелизм между обработкой и передачей информации. ЦП находится в активном ожидании завершения операции ввода/вывода. Такой способ работы драйверов используется в однопрограммных однопользовательских ОС.

Достоинство - простота. Недостаток - синхронный ввод/вывод, отсутствие параллелизма между вводом/выводом и обработкой.

При работе по прерываниям действия выполняются в следующей последовательности:

1. Инициализируется операция ввода/вывода и разрешает прерывания от устройства.

2. Возвращает управление ЦП для выполнения других действий до момента прерывания.

3. При прерывании происходит переход на программу обработки, в которой проверяется отсутствие ошибки ввода/вывода, и после завершения обработки осуществляется возврат на прерванную программу.

Достоинство - асинхронный ввод/вывод, то есть параллельная работа ЦП и ПУ. Используется в мультипрограммных системах.

При работе по прямому доступу к памяти (ПДП) (Direct Memory Access-DMA)действия выполняются в следующем порядке:

1. ЦП запускает канальную программу командой "запустить канал", которая содержит адрес канала и периферийного устройства. С этого момента канал и ЦП работают параллельно.

2. Канал выполняет свою программу, которая заканчивается нормально либо с ошибкой, либо по команде ЦП "остановить канал".

3. В любой момент ЦП может проверить состояние канала, выполняющего канальную программу, командой "тестировать канал". Эта проверка не влияет на выполнение программы. Обработка ошибок ввода/вывода здесь осуществляется супервизором ввода/вывода.
















Независимый от устройств слой операционной системы


Это компонент представляет собой супервизор ввода/вывода, через который процессы пользователя получают доступ к операциям ввода/вывода.

Точная граница между драйверами и независимыми от устройств программами определяется системой, так как некоторые функции, которые могли бы быть реализованы независимым способом, в действительности выполнены в виде драйверов для повышения эффективности или по другим причинам.

Типичными функциями для независимого от устройств слоя являются:

• обеспечение общего интерфейса к драйверам устройств;

• именование устройств;

• защита устройств;

• обеспечение независимого размера блока;

• буферизация;

• распределение памяти на блок-ориентированных устройствах;

• распределение и освобождение выделенных устройств;

• уведомление об ошибках;

• прием запросов на ввод/вывод от пользователей процессов;

• создание и обслуживание очереди запросов на ввод/вывод;

• обеспечивание запуска драйверов и их динамическую загрузку;

• обработка прерывания ввода/вывода.

Остановимся на некоторых функциях данного перечня. Верхним слоям программного обеспечения неудобно работать с блоками разной величины, поэтому данный слой обеспечивает единый размер блока, например, за счет объединения нескольких различных блоков в единый логический блок. В связи с этим верхние уровни имеют дело с абстрактными устройствами, которые используют единый размер логического блока независимо от размера физического сектора. При создании файла или заполнении его новыми данными необходимо выделить ему новые блоки. Для этого ОС должна вести список или битовую карту свободных блоков диска. На основании информации о наличии свободного места на диске может быть разработан алгоритм поиска свободного блока, независимый от устройства и реализуемый программным слоем, находящимся выше слоя драйверов.






























Организация программного обеспечения ввода-вывода


Основная идея организации программного обеспечения ввода-вывода состоит в разбиении его на несколько уровней, причем нижние уровни обеспечивают экранирование особенностей аппаратуры от верхних, а те в свою очередь обеспечивают удобный интерфейс для пользователей.

Ключевым принципом является независимость от устройств. Вид программы не должен зависеть от того, читает ли она данные с гибкого диска или с жесткого диска. Очень близкой к идее независимости от устройств является идея единообразного именования, то есть для именования устройств должны быть приняты единые правила.

Другим важным вопросом для программного обеспечения ввода-вывода является обработка ошибок. Вообще говоря, ошибки следует обрабатывать как можно ближе к аппаратуре. Если контроллер обнаруживает ошибку чтения, то он должен попытаться ее скорректировать. Если же это ему не удается, то исправлением ошибок должен заняться драйвер устройства. Многие ошибки могут исчезать при повторных попытках выполнения операций ввода-вывода, например, ошибки, вызванные наличием пылинок на головках чтения или на диске. И только если нижний уровень не может справиться с ошибкой, он сообщает об ошибке верхнему уровню.

Еще один ключевой вопрос - это использование блокирующих (синхронных) и неблокирующих (асинхронных) передач. Большинство операций физического ввода-вывода выполняется асинхронно - процессор начинает передачу и переходит на другую работу, пока не наступает прерывание. Пользовательские программы намного легче писать, если операции ввода-вывода блокирующие - после команды READ программа автоматически приостанавливается до тех пор, пока данные не попадут в буфер программы. ОС выполняет операции ввода/вывода асинхронно, но представляет их для пользовательских программ в синхронной форме.

Последняя проблема состоит в том, что одни устройства являются разделяемыми, а другие - выделенными. Диски - это разделяемые устройства, так как одновременный доступ нескольких пользователей к диску не представляет собой проблему. Принтеры - это выделенные устройства, потому что нельзя смешивать строчки, печатаемые различными пользователями. Наличие выделенных устройств создает для операционной системы некоторые проблемы. Для решения поставленных проблем целесообразно разделить программное обеспечение ввода-вывода на четыре слоя:

1. Независимый от устройств слой операционной системы.

2. Обработка прерываний.

3. Драйверы устройств.

4. Пользовательский слой программного обеспечения.




















Физическая организация периферийных устройств


В общем случае ПУ называют средство ввода/вывода, способное осуществлять передачу информации между ЦП или ОП компьютера и внешними носителями информации. Многообразие внешних носителей и способов кодирования информации обусловили существование большого числа периферийных различных устройств, каждое из которых характеризуется:

• быстродействием;

• порцией обмена информации (1 бит, байт, слово, сектор, трек);

• системой кодирования;

• набором операций управления устройством.

Внешнее устройство состоит из механической и электронной компонент, и узким местом является механическая часть.

Постоянная забота об эффективном использовании ЦП, снижении его простоев во время выполнения операций ввода/вывода привели к росту автономии устройств ввода/вывода и появлению специализированных процессоров ввода/вывода, называемых каналами (chanel).

Канал ввода/вывода (КВВ) - это специализированный процессор, осуществляющий обмен данными между ОП и ПУ и работающий независимо от ЦП. В системах ввода/вывода с каналами ЦП лишь запускает операцию ввода/вывода и по окончании ввода/вывода через прерывания от канала уведомляется об окончании операции ввода/вывода.

КВВ решают проблему различного быстродействия ЭВМ и устройств ввода/вывода. Канал может управлять одним устройством с высокой пропускной способностью (типа дисковода) или быть распределенным между несколькими устройствами с меньшей пропускной способностью (это, например, модемы). Обычно к каналу подключается совокупность быстродействующих или медленно действующих устройств, которыми канал управляет поочередно или одновременно.

По способам параллельного выполнения запросов ЦП на ввод/вывод каналы ввода/вывода подразделяются на три типа:

1.Байт-мультиплексные каналы, допускающие одновременный побайтовый обмен с несколькими медленными устройствами.

2. Селекторные каналы, допускающие поочередный, быстрый обмен с ПУ блоками ввода/вывода, каждый из которых имеет свой адрес.

3. Блок-мультиплексные каналы, допускающие одновременный блочный обмен данными с несколькими устройствами.

Как мы уже замечали, КВВ решает только проблему различия быстродействия ПУ и ЦП. Для решения же проблемы стандартного интерфейса ПУ с внутрисистемной шиной (магистралью) ЭВМ предназначено устройство управления (УУ) ПУ, называемое контроллером или адаптером устройства.

Контроллер ПУ - устройство управления, обеспечивающее стандартный интерфейс и подключение ПУ к системным магистралям ЭВМ. Если интерфейс между контроллером и устройством стандартизован, то независимые производители могут выпускать совместимые как контроллеры, так и устройства.

Контроллеры бывают как групповые, так и одиночные. Групповые контроллеры обеспечивают подключение группы однотипных устройств. Такие контроллеры обеспечивают в каждый момент времени передачу информации с одним устройством с одновременным выполнением других операций, не связанных с передачей данных, других устройств (например, перемотку магнитной ленты, перемещение головки НМД).

Разделение функций между контроллером и периферийным устройством зависит от типа ПУ: логические функции (соединение и синхронизация операций, передача сигналов об окончании операции или исключительных ситуациях) выполняются контроллером, а физические (передача данных) - периферийным устройством.

Операционная система обычно взаимодействует не с устройством, а с контроллером. Контроллер, как правило, выполняет простые функции, например, преобразует поток бит в блоки, состоящие из байт, и осуществляют контроль и исправление ошибок. Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. В некоторых компьютерах такие регистры являются частью физического адресного пространства, а специальные операции ввода-вывода отсутствуют. В других компьютерах адреса регистров ввода-вывода, называемых часто портами, образуют собственное адресное пространство за счет введения специальных операций ввода-вывода:

• регистр управления и состояния, через который ЭВМ задает команды ПУ и получает информацию о его состоянии и результатах выполнения команды;

• регистр данных, через который передается байт в коде ЭВМ.

ОС выполняет ввод-вывод, записывая команды в регистры контроллера. Например, контроллер гибкого диска IBM PC принимает 15 команд, таких, как READ, WRITE, SEEK, FORMAT и т.д. Когда команда принята, процессор оставляет контроллер и занимается другой работой. При завершении команды контроллер организует прерывание для того, чтобы передать управление процессору операционной системы, которая должна проверить результаты операции. Процессор получает результаты и статус устройства, читая информацию из регистров контроллера.

В настоящее время распространены три основные схемы организации ввода/вывода, соответствующие конфигурациям микро-, мини- и больших ЭВМ (рис. 1,2,3 соответственно).



Рис.1. Схема организации ввода/вывода для персональных ЭВМ

В этой конфигурации шина разделяется между различными устройствами и выполняется побайтная передача информации между ЦП и памятью. Память подключается непосредственно на специализируемую магистраль.

УПДП - устройство прямого доступа памяти (DMA-direct memory access) обеспечивает пересылку блоков данных независимо от ЦП и упрощает канал ввода/вывода.

На больших ЭВМ контроллер может быть связан с несколькими каналами ввода/вывода, а периферийное устройство - с несколькими контроллерами.

Контроллер может иметь несколько адресов и путей доступа.

Адресация периферийных устройств на больших ЭВМ осуществляется составным адресом, включающим: номер канала, номер котроллера, номер устройства на контроллере:

0 0 F

№ канала №контр. № устройства.

В мини- и микро- ЭВМ для адресации устройств используются зарезервированные ячейки памяти.

Доступ к периферийным устройствам здесь осуществляется как обычный доступ к ячейкам ОП, что значительно упрощает программирование ввода/вывода./font>



Рисунок 2. Схема организации ввода/ вывода для мини ЭВМ



Рис.10.3. Схема организации ввода/вывода для многомашинного комплекса
































Мультипроцессорные системы с равноправными процессорами


В мультипроцессорной системе с равноправными процессорами каждый ЦП имеет собственную ОС и управляет собственными ресурсами и устройствами ввода/вывода по типу многомашинных комплексов. В такой организации для управления всей системы существуют таблицы с глобальной системной информацией, доступ к которой строго контролируется методом взаимного исключения. Каждый ЦП берет из общей операции задание и выполняет его до завершения. Во время исполнения взаимодействие между ЦП не предусматривается. Данную систему характеризует высокая надежность, но не достаточно высокий уровень распараллеливания


















































Мультипроцессорные системы с подчиненными процессорами


В мультипроцессорных системах с подчиненными процессорами один ЦП является главным, остальные - подчиненными (ведущий - ведомые). Это самая простая организация не намного сложнее однопроцессорной системы. Операционная система выполняется только на главном процессоре. Этот ЦП осуществляет ввод/вывод и управляет загрузкой подчиненных процессоров. Подчиненные процессоры выполняют только программы пользователя. Узкое место - главный процессор. Он должен иметь большую мощность (производительность), чем подчиненные процессоры, чтобы последние не простаивали.



Рисунок.9.2 Мультипроцессорная система






Два вида мультипроцессорных вычислительных систем


Существует два вида мультипроцессорных вычислительных систем:

1. Мультипроцессорная вычислительная система со слабо связанными процессорами, называемая многомашинными комплексами, которые предусматривают соединение двух или более вычислительных машин при помощи канала связи и/или внешней памяти.

2. Мультипроцессорные системы с сильно связанными процессорами, называющиеся многопроцессорными вычислительными комплексами, которые имеют единую ОП, коллективно используемую несколькими ЦП.



Рисунок 9.1. Системы со слабо связанными процессорами.

Мультипроцессорная организация системы приводит к усложнению всех алгоритмов управления ресурсами.

Например, необходимо планировать процессы не для одного, а для нескольких процессоров, что гораздо сложнее. Сложности возрастают при росте конфликтов по обращению к устройствам ввода/вывода, данным общей памяти и совместно используемым программам. Все эти проблемы должны решать ОС путем синхронизации, ведения очередей, планирования процессов.

Итак, в отличие от однопроцессорных ОС, подсистемы управления процессами и заданиями должны выполнять следующие основные функции:

• организация взаимодействия центральных процессоров (синхронизация);

• управление загрузкой процессоров (диспетчирование);

Существует несколько способов взаимодействия ЦП:

1. Вычислительный комплекс и ОС с подчиненными процессорами - асимметричное мультипроцессирование (один главный процессор и несколько подчиненных).

2. Вычислительный комплекс и ОС с равноправными процессорами.

3. Вычислительный комплекс и ОС с симметричной организацией - симметричное мультипроцессирование.


























Алгоритмы планирования процессов. Сеть многоуровневых очередей.


Сеть многоуровневых очередей с обратными связями (рисунок 3), которая имеет следующие достоинства:

• определяет характер процессов и разделяет на соответствующие категории;

• отдает предпочтение коротким процессам;

• отдает предпочтение обменным процессам с хорошим коэффициентом использования устройств ввода/вывода. Это наиболее совершенный и сложный механизм планирования.



Рисунок 3. Сеть многоуровневых очередей

Сеть представляет собой упорядоченную структуру очередей готовых процессов, работающих с различными дисциплинами обслуживания. Каждый процесс входит в сеть очередей с конца верхней очереди и перемещается по FIFO пока не получит ЦП. Процесс выполняется. Если в течение кванта процесс запросил выполнение операции ввода/вывода, то он после завершения операции будет установлен в очередь готовых процессов текущего уровня. Если в течение выделенного кванта времени процесс не завершился, то он устанавливется в очередь готовых процессов следующего уровня, у которого понижен приоритет и увеличен квант времени. Таким образом, чем больше время работы процесса, тем больший квант времени выделяется, но меньше приоритет, что приводит к получению ЦП реже, но на более длительный период.

Таким образом, сеть многоуровневых очередей - это адаптивный механизм планирования, который реагирует на изменение поведения системы.

В ОС OS/2, UNIX приоритеты устанавливаются с помощью класса приоритета и уровня приоритета в классе. Есть три класса приоритета и 32 различных уровня приоритета для класса.

Классы бывают:

Критический или высокий - для программ управления процессом или связью с другими компьютерами;

Обыкновенный - для большинства программ пользователя;

Запасной или низкий - задачи и процессы из этого класса выполняются, если в очереди нет критических или обыкновенных задач.








Алгоритмы планирования процессов. Планирование на промежуточном уровне.


3.Планирование на промежуточном уровне.

На данном уровне определяется, каким процессам будет разрешено состязаться за захват ЦП, то есть быть готовыми, и какие процессы будут кратковременно приостановлены (задержаны) для оптимизации загрузки системы. Промежуточное планирование управляет текущей производительностью вычислительной системы.
















Алгоритмы планирования процессов. Планирование на нижнем уровне или диспетчирование процессов.


2.Планирование на нижнем уровне или диспетчирование процессов.

Здесь осуществляется выбор готового процесса для выполнения, то есть предоставления ему ЦП. Выбранный процесс становится активным. Эту работу выполняет системный компонент - диспетчер.




Алгоритмы планирования процессов. Планирование на верхнем уровне или планирование заданий.


1.Планирование на верхнем уровне или планирование заданий.

На этом уровне осуществляется выбор заданий пользователем для выполнения и их запуск. Выбранные задания становятся готовыми процессами. Эту работу выполняет системный компонент - планировщик заданий.




Двухуровневая страничная организация виртуальной памяти


Двухуровневая страничная организация

Двухуровневая страничная организация образуется из гиперстраниц, традиционно называющихся сегментами, которые в свою очередь подразделяются на страницы.

Виртуальный адрес состоит также из трех компонентов (гиперстраница, страница, смещение).

Достоинства:

1. Сокращение объема памяти под таблицы страниц путем размещения в ОП только активных частей таблиц страниц.

2. Появляется возможность моделировать сегментную организацию, то есть обеспечить эффективное разделение общих процедур и защиту процессов посредством более простой схемы адресации.

Пример: ЕС ЭВМ ряд 2 и IBM PC

Страницы 2 - 4 кб; гиперстраница 64 - 1024 кб

В общем случае информация постоянно находится на более низком уровне иерархической структуры памяти, а механизм управления иерархией обеспечивает передачу на верхний уровень наиболее вероятную для обработки информацию. В этом случае верхний уровень работает как КЭШ по отношению к нижнему уровню. Вначале идея рассматривалась только к памяти между ЦП и ОП, затем распространилась в общем смысле к иерархии памяти.




Комбинированная странично-сегментная организация виртуальной памяти


Комбинированная странично-сегментная организация памяти

Как видно из названия, данный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов. Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою очередь делится на виртуальные страницы, которые нумеруются в пределах сегмента. Оперативная память делится на физические страницы. Загрузка процесса выполняется операционной системой постранично, при этом часть страниц размещается в оперативной памяти, а часть на диске. Для каждого сегмента создается своя таблица страниц, структура которой полностью совпадает со структурой таблицы страниц, используемой при страничном распределении. Для каждого процесса создается таблица сегментов, в которой указываются адреса таблиц страниц для всех сегментов данного процесса. Адрес таблицы сегментов загружается в специальный регистр процессора, когда активизируется соответствующий процесс.

Трехуровневая адресация использует две таблицы отображения (таблица сегментов + таблица страниц сегментов).

V=(S,P,d)

S - номер сегмента; P- номер страницы; d - смещение.

Динамическое управление адресами здесь выполняется более сложно в два этапа, и поэтому в таких системах применяется высокоскоростная ассоциативная память, по типу кэш-памяти.

Обычная адресуемая память - это память, к которой обращаются по адресу и выбирают значение.



Рисунок.6.3 Преобразование адреса страницы при чисто ассоциативном отображении.

Ассоциативная память - это параллельная память, к которой осуществляется одновременный доступ по всем ячейкам памяти по значению и выбирается в результате либо адрес соответствующей ячейки, либо связанные с этой ячейкой другие значения.

Достоинства странично-сегментной организации:

1. Комбинированная организация эффективна для больших программ (процедур), имеющих свою локальность.

2. Делает более эффективным коллективное использование общих (разделяемых) сегментов, так как строки различных таблиц сегментов будут указывать на одну таблицу страниц коллективно используемого сегмента.


























Сегментная организация виртуальной памяти


Сегментная организация виртуальной памяти

В системе с сегментной организацией памяти снимается ограничение на фиксированный размер блока и выполняется соответствующее произвольное разбиение АП процесса на сегменты.

Сегмент - это единица логического разбиения программ (процедура, модуль, область данных), имеющая переменный размер и имя. Напомним, что страница - это физическая единица памяти.

Сегментная организация обеспечивает простое и естественное разделение общих сегментов между несколькими пользователями и защиту сегментов посредством связывания с ним прав доступа, подразделяющихся на:

• выполнение E

• чтение R

• запись W

• расширение A

и их различных комбинаций.

Для сегментной организации в таблице отображения сегментов с каждым сегментом связан дескриптор, который содержит адрес размещения сегмента в ОП, его длину и права доступа (ERWA), признак обращения к сегменту за последний интервал времени, а также признак присутствия в РОП. Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре.

В сегментной организации все сегменты различного размера и могут размещаться в несмежных участках РОП.

Достоинства:

1.Уменьшение временной фрагментации, так как естественно учитывается свойство локальности программ.

2.Легко совмещается с использованием общих процессов, поскольку данные и программа целиком находятся в одном блоке.

3.Возможность обеспечить четкое управление доступом к сегменту со стороны общих процессов и их полную защиту.

Недостатки:

1.Более сложное управление и защита ОП. Здесь уже не достаточно пары граничных регистров, а необходимы ключи защиты индивидуальных сегментов памяти.

2.Может возникнуть временная фрагментация для больших размеров процедур и данных.




Управление виртуальной памятью. Стратегия выталкивания (замещения)


Стратегия выталкивания (замещения), определяющая, какую страницу/сегмент удалить из ОП для освобождения места поступающей страницы.

Здесь основная проблема "пробуксовки", при которой вытолкнутая страница в следующий момент должна вновь размещаться в РОП.

Рассмотрим процедуры определения блоков для выталкивания из ОП.

а) выталкивание случайной страницы - в реальных системах не применяется;

б) выталкивание первой пришедшей страницы (FIFO - очередь). Для ее реализации необходимо устанавливать временные метки страниц.

Аргумент: у страницы уже были возможности использовать свой шанс.

Фактически: большая вероятность заместить активно используемые страницы, поскольку нахождение страниц длительное время может означать, что она постоянно в работе. Например, используемый редактор текстов.

в) выталкивание дольше всего неиспользованных страниц.

Для реализации необходимо реализовать обновляемые временные метки. Эвристический аргумент: - недавнее прошлое - хороший ориентир на будущее.

Недостаток - существенные издержки: постоянное обновление временных меток.

г) выталкивание реже всего используемых страниц - предполагает наличие счетчиков страниц (менее интенсивно, нежели обновляемые временные метки). Интуитивно оправдано, но тоже может быть не рационально.

д) выталкивание не использующихся в последнее время страниц - самый распространенный алгоритм с малыми издержками. Реализуется двумя аппаратными битами на страницу:

1.признак обращения 0 - было

1 - не было.

2.признак модификации записи 0 - неизменен.

1 - изменен.

Возможны следующие варианты комбинаций {00,10,01,11}. Если изменений на странице не было, то страницу можно просто переписать, а не сохранять на диске.







































2#9. Динамическая страничная организация виртуальной памяти

Динамическая страничная организация

Динамическая страничная организация памяти - это страничная организация РОП с динамическим размещением страниц процессов по их запросам (Intel 386 – размер страницы 4 Кбайт)

Достоинства:

1. Допустимость максимального объема выполняющихся программ, простота их программирования.

2. Значительное уменьшение временной фрагментации, максимальное использование РОП и максимальный уровень мультипрограммирования.

Недостатки:

1. Произвольное разбиение процесса на страницы плохо учитывает свойство локальности программ и не устраняет полностью временную фрагментацию, а также создает трудности совместного использования и защиты общих программ и данных.

2. Сложность управления памятью, накладные расходы на хранение таблиц отображения страниц. При неоптимальных рабочих множествах страниц и размерах страниц возможна пробуксовка процессов ("сплошной обмен").

Для решения проблемы пробуксовки страниц важную роль играет не только стратегия выталкивания, но и размер страницы.

На выбор оптимального размера страницы влияют следующие факторы:

1.Малый размер приводит к увеличению таблицы отображения страниц, называемый табличной фрагментацией.

2.Большой размер страницы приводит к тому, что в ОП здесь помещены команды и данные, к которым не было обращений.

3.Ввод-вывод будет эффективен при больших размерах страниц.

4.Свойство локальности распространяется, как правило, на малые участки программ.

5.При малых размерах страниц потери на внутреннюю фрагментацию уменьшаются.

Вывод: необходимость небольших размеров страницы.

Экспериментальные результаты поведения программы в ВС со страничной организацией ВП показывают:

1.Когда процесс начинается выполняться, он обращается к большему проценту своих страниц.

2.При постоянном объеме выделенной ОП с увеличением размера страницы растет число прерываний по отсутствию нужной страницы.

3.С увеличением количества выделенных процессу блоков (страничных кадров) уменьшается число страничных прерываний, однако, когда процессу выделено достаточное число блоков, уменьшение прерываний стабилизируется (эффект насыщения).

4.Число команд, выполненных на странице до передачи управления другой странице, как правило, невелико.
















Управление виртуальной памятью. Стратегия размещения


Стратегия размещения, определяющая, куда поместить поступающую страницу/сегмент. В страничных системах - тривиально: в любой свободный блок (страница имеет фиксированный размер). В сегментных системах те же самые стратегии, что и для реальной ОП (в первую подходящую область, в наиболее подходящую, в наименее подходящую).




















































Управление виртуальной памятью. Стратегия вталкивания


Стратегия вталкивания, определяющая, когда следует переписать страницу или сегмент из внешней памяти в ОП.

а) вталкивание по запросу - система ожидает ссылки на страницу/сегмент от выполняющегося процесса (прерывание по отсутствию страницы);

аргументы за:

• путь выполнения программы наверняка предсказать невозможно;

• гарантия расположения в ОП только нужных страниц;

• накладные расходы на определение требуемых страниц минимальны;

аргументы против:

• подкачка по одному блоку приводит к увеличению общего времени ожидания.

б) упреждающее вталкивание предполагает, что система может предвидеть необходимость использования в дальнейшем страницы/сегмента. Если вероятность обращений высока и есть свободная ОП, то соответствующие блоки переписываются в ОП.

Достоинство: сокращается время ожидания.

В настоящее время быстродействие аппаратуры увеличивается, и неоптимальные решения не приводят к уменьшению эффективности вычислительных систем.




Четыре способа организации виртуальной памяти


Блоки могут быть фиксированного размера (страницы) и переменного размера (сегменты). В этой связи существует четыре способа организации виртуальной памяти:

1.Динамическая страничная организация.

2.Сегментная организация.

3.Комбинированная сегментно-страничная организация.

4.Двухуровневая страничная организация.

Виртуальные адреса в страничных и сегментных системах являются двухкомпонентными и представляют собой упорядоченную пару (p,d), где p - номер блока (страницы либо сегмента), в которой размещается элемент, а d - смещение относительно начального адреса этого блока. Преобразование виртуального адреса V=(p,d) в адрес реальной памяти r осуществляется следующим образом. При активизации очередного процесса в специальный регистр процессора загружается адрес таблицы отображения блоков данного процесса. В соответствии с номером блока p из таблице отображения блоков, считывается строка, в которой устанавливается соответствие между номерами виртуальных и физических страниц для страниц, загруженных в оперативную память, или делается отметка о том, что виртуальная страница выгружена на диск. Кроме того, в таблице страниц содержится управляющая информация, такая как признак модификации страницы, признак невыгружаемости (выгрузка некоторых страниц может быть запрещена), признак обращения к странице (используется для подсчета числа обращений за определенный период времени) и другие данные, формируемые и используемые механизмом виртуальной памяти. К считанному физическому адресу размещения выбранного блока добавляется размер смещения d и вычисляется требуемый реальный адрес.



Рисунок 2. Преобразование виртуального адреса в реальной адрес памяти

Рассмотрим, в чем состоит стратегия управления виртуальной памятью? Аналогично управлению РОП для управления ВП имеется три категории стратегий, при имеющейся цели снизить ожидание страниц и располагать в РОП только используемые блоки.










Концепция виртуальной памяти


Концепция виртуальной памяти

В ВС с виртуальной памятью адресное пространство (АП) процесса (образ процесса) во время выполнения хранится во внешней памяти ЭВМ и загружается в реальную память по частям динамически по необходимости в любое свободное место РОП. Однако программа ничего не знает об этом, написана и выполняется так, как будто полностью находится в РОП.

Виртуальная память - это моделирование оперативной памяти во внешней памяти.

Механизм отображения виртуальных и реальных адресов устанавливает между ними соответствие и называется динамическим преобразованием адресов (ДПА).

Компьютер здесь уже выступает как логическое устройство, а не физическая машина с уникальными характеристиками. ДПА поддерживается на аппаратно-микропрограммном уровне. В МП Intel, начиная с 386 процессора, выполняется поддержка виртуальной памяти.

Такая процедура выполняется для EC ЭВМ - ряд 2 и выше, для СМ ЭВМ- 1700, для IBM PC – I386 и выше.

При управлении виртуальной памятью смежные виртуальные адреса не обязательно будут смежными реальными адресами (искусственная смежность). Программист освобождается от необходимости учитывать размещение своих процедур и данных в РОП. Он получает возможность писать программы наиболее естественным образом, прорабатывая лишь детали алгоритма и структуру программы, игнорируя конкретные особенности структуры аппаратных средств.

Механизм ДПА предполагает ведение таблиц, показывающих какие ячейки ВП в текущий момент времени находятся в РОП и где именно. Поскольку индивидуальное отображение элементов информации (пословное или побайтовое) не имеет смысла (так как под таблицы отображения адресов потребовалось бы РОП больше чем под процессы), то отображение адресов выполняется на уровне блоков ОП.



Рисунок 1. Динамическое преобразование адресов

Проблема: какую часть процессов держать в ОП, в некоторые моменты времени, выталкивая одни участки РОП и размещая другие.

Еще один вопрос, который необходимо решать: Каким сделать размер блока?

Увеличение размера блока приводит к уменьшению размера таблицы отображения блоков, но увеличивает время обмена и, наоборот, уменьшение размера блока приводит к увеличению таблиц и уменьшению времени обмена с внешней памятью.










Управление реальной памятью. Общие недостатки реальной ОП


Общие недостатки реальной ОП:

(Физический) ограниченный объем реальной памяти и, соответственно, максимального объема выполняемой программы. Адресное пространство ЭВМ определяется разрядностью адресов, допустимых в архитектуре ЭВМ, а программа не может быть размером больше чем объем ОП.

ЕC ЭВМ – 24 - разрядные адресные регистры определяют допустимое адресное пространство размером 16 Мб, реально же устанавливается объем памяти 512 Кб - 8 Мб.



Рисунок 5. Таблица отображения страниц (ТОС):

Pentium может адресовать своими 32-разрядными регистрами 4 Gb ОП, реально на компьютере устанавливается значительно меньший объем памяти (32-192 Mb). Не трудно представить какой огромный размер виртуальной ОП будет доступен с использованием анонсированного фирмой Intel 64 - разрядного процессора Merced.

(Логический) неэффективное использование РОП ввиду необходимости загрузки в ОП задания пользователя целиком, в то время как 85 процентов времени выполнения программ реализуется обычно 5-10% команд программ.

Все проблемы привели к появлению концепции виртуальной памяти как воплощения идеи виртуализации ресурсов.














Управление реальной памятью. Страничная организация памяти


Страничная организация памяти реализует концепцию несвязного распределения памяти ЭВМ и означает

а) разделение ОП ЭВМ на блоки фиксированной длины размером от 1 до 4 Kb

б) разделение адресного пространства программы загрузчиком на страницы фиксированного размера, равного длине блока;

в) динамически поблочно выдается память программам в любом месте ЭВМ;

г) аппаратная поддержка соответствия номеров блоков ОП ЭВМ и страниц процесса по соответствующей таблице отображения страниц.

Достоинства:

1.Отсутствие внешней фрагментации (достаточно разделов для больших программ).

2.Внутренняя фрагментация ограничена размером блока ОП ЭВМ < 1 -4 кб.

Общий итог развития форм организации реальной ОП - практически полная ликвидация фрагментации.




Управление реальной памятью. Стратегия замещения


Стратегия замещения, определяющая какой блок/сегмент программы или данных следует вытолкнуть из ОП для освобождения места для более приоритетных программ (в системах со свопингом). Естественно, что организация памяти тесно связана с мощностью ЦП, объемом ОП и режимом мультипрограммирования






























Управление реальной памятью. Стратегия размещения


Стратегия размещения, определяющая, куда помещать поступающую программу.

а) "первый подходящий" участок (эффективность по времени размещения);

б) "наиболее подходящий" участок (эффективность по объему);

в) "наименее подходящий" - странная стратегия со следующей аргументацией: после размещения процесса в больший свободный участок, оставшееся место также велико и может быть достаточно для размещения еще одной программы. Псевдоэффективность по мультипрограммированию.




Управление реальной памятью. Стратегия выборки


Стратегия выборки - определяет, когда разместить в ОП очередной блок программы или данных.

а) выборка по запросу (требованию), когда очередной блок загружается по требованию процесса. При такой реализации невозможно в общем случае определить передачу управления в программе (настройка адресов должна быть выполнена после загрузки);

б) упреждающая выборка, основанная на свойствах последовательного выполнения программы и локальности циклов. В настоящее время наиболее употребляемая стратегия.




Управление реальной памятью. Основные задачи подсистемы управления памятью


Основная память (ОП), в которой размещаются процессы и которая имеет ограниченный объем, представляет собой самый ограниченный и дорогостоящий ресурс. Поэтому организация и управление ОП ЭВМ является одним из самых важнейших факторов, определяющих построение и развитие ОС.

Именно организация и управление ОП во многом определяют фактический уровень мультипрограммирования ОС, то есть возможности выполнения нескольких параллельных процессов. Функциями ОС по управлению памятью являются: отслеживание свободной и занятой памяти, выделение памяти процессам и освобождение памяти при завершении процессов, вытеснение процессов из оперативной памяти на диск, когда размеры основной памяти не достаточны для размещения в ней всех процессов, и возвращение их в оперативную память, когда в ней освобождается место, а также настройка адресов программы на конкретную область физической памяти.

Основными задачами подсистемы управления памятью (УП) являются:

1.Эффективное размещение процессов в ОП.

2.Защита памяти процессов.

Основная цель УП - обеспечить максимальный уровень мультипрограммирования и тем самым максимальную загрузку ЦП.

Современные ЭВМ имеют 3-х уровневую, иерархическую организацию запоминающих устройств (ЗУ) (внутренние регистры процессора, различные типы сверхоперативной и оперативной памяти, диски, ленты), отличающихся средним временем доступа и стоимостью хранения данных в расчете на один бит (рисунок 1). Пользователю хотелось бы иметь и недорогую и быструю память. Кэш-память представляет некоторое компромиссное решение этой проблемы.



Рисунок 1. Иерархическая организация памяти ЭВМ.

Кэш-память - это способ организации совместного функционирования двух типов запоминающих устройств, отличающихся временем доступа и стоимостью хранения данных, который позволяет уменьшить среднее время доступа к данным за счет динамического копирования в "быстрое" ЗУ наиболее часто используемой информации из "медленного" ЗУ.

Кэш-памятью часто называют не только способ организации работы двух типов запоминающих устройств, но и одно из устройств - "быстрое" ЗУ. Важно, что механизм кэш-памяти является прозрачным для пользователя, который не должен сообщать никакой информации об интенсивности использования данных и не должен никак участвовать в перемещении данных из ЗУ одного типа в ЗУ другого типа, все это делается автоматически системными средствами.

Рассмотрим частный случай использования кэш-памяти для уменьшения среднего времени доступа к данным, хранящимся в оперативной памяти. Для этого между процессором и оперативной памятью помещается быстрое ЗУ, называемое просто кэш-памятью. В качестве такового может быть использована, например, ассоциативная память. Содержимое кэш-памяти представляет собой совокупность записей обо всех загруженных в нее элементах данных. Каждая запись об элементе данных включает в себя адрес, который этот элемент данных имеет в оперативной памяти, и управляющую информацию: признак модификации и признак обращения к данным за некоторый последний период времени.

В системах, оснащенных кэш-памятью, каждый запрос к оперативной памяти выполняется в соответствии со следующим алгоритмом:

1. Просматривается содержимое кэш-памяти с целью определения, не находятся ли нужные данные в кэш-памяти;

2. кэш-память не является адресуемой, поэтому поиск нужных данных осуществляется по содержимому - значению поля "адрес в оперативной памяти", взятому из запроса.

Если данные обнаруживаются в кэш - памяти, то они считываются из нее, и результат передается в процессор. Если нужных данных нет, то они вместе со своим адресом копируются из оперативной памяти в кэш-память, и результат выполнения запроса передается в процессор. При копировании данных может оказаться, что в кэш-памяти нет свободного места, тогда выбираются данные, к которым в последний период было меньше всего обращений, для вытеснения из кэш-памяти. Если вытесняемые данные были модифицированы за время нахождения в кэш-памяти, то они переписываются в оперативную память. Если же эти данные не были модифицированы, то их место в кэш-памяти объявляется свободным.

На практике в кэш-память считывается не один элемент данных, к которому произошло обращение, а целый блок данных, это увеличивает вероятность так называемого "попадания в кэш", то есть нахождения нужных данных в кэш-памяти.

В реальных системах вероятность попадания в кэш составляет примерно 0,9. Высокое значение вероятности нахождения данных в кэш-памяти связано с наличием у данных объективных свойств: пространственной и временной локальности.

Пространственная локальность. Если произошло обращение по некоторому адресу, то с высокой степенью вероятности в ближайшее время произойдет обращение к соседним адресам.

Временная локальность. Если произошло обращение по некоторому адресу, то следующее обращение по этому же адресу с большой вероятностью произойдет в ближайшее время.

Все предыдущие рассуждения справедливы и для других пар запоминающих устройств, например, для оперативной памяти и внешней памяти. В этом случае уменьшается среднее время доступа к данным, расположенным на диске, и роль кэш-памяти выполняет буфер в оперативной памяти.

Физически ОП имеет линейную организацию и представляет собой последовательность адресуемых ячеек (байт, 1 байт = 8 бит) от 0 до N, которая делится на слова, блоки, сегменты. Номер является адресом ячейки памяти. Размер ОП определяется в килобайтах (1Кб=1024б), мегабайтах (1Мб=1024Кб), гигабайтах (1Гб=1024Мб), терабайтах (1Тб=1024 Гб) и т.д.

Слово- это единица обмена ОП с ЦП, определяемое разрядностью с ЦП.

Блок - это непрерывная область памяти с общим ключом защиты. В EC ЭВМ - размер блока 2К, поэтому процессом выдается память, кратная 2К.

Сегмент - это некоторый участок памяти (для IBM PC от 16 б до 64Кб). Сегмент может содержать несколько блоков.

Для эффективного использования ОП необходимо определить стратегию управления памятью. ОС постоянно приходится решать задачу: когда, куда и за счет кого ввести в ОП процесс и данные.




Управление процессами. Основная концепция обработки прерываний


В различных ЭВМ существует различный набор типов прерываний, которые можно разделить на 6 классов.

1. Программы-прерывания по системной директиве. Инициатор – активный процесс, выполнивший команду SVC (обращение к супервизору), то есть запрос на предоставление ОС какой-либо системной вычислительной услуги.

2. Прерывания ввода-вывода. Инициируются устройством ввода/вывода (УВВ) и сигнализируют ЦП о том, что произошло изменение состояния канала ввода-вывода (КВВ) или УВВ (например: завершение операции, ошибка, переход устройства в состояние готовности).

3. Внешние прерывания. Причинами их является нажатие операторами клавиш на панели ЭВМ или прием сигнала прерывания от другого ЦП в мультипроцессорной системе, сигнала от модема.

4. Прерывание по рестарту. Нажатие оператором на панели управления кнопки рестарта или Reset.

5. Логические прерывания по контролю программы вызываются программными ошибками, обнаруженными при выполнении программы (деление на ноль, попытка выполнить привилегированную команду в пользовательском режиме, неверный код операции, защита памяти и т.д.).

6. Прерывания по контролю машины вызываются аппаратными ошибками.

Планирование процессов включает в себя решение следующих задач:

1. определение момента времени для смены выполняемого процесса;

2. выбор процесса на выполнение из очереди готовых процессов;

3. переключение контекстов "старого" и "нового" процессов.

Первые две задачи решаются программными средствами и будут рассмотрены в следующих разделах, а последняя выполняется, как правило, аппаратно.




Управление процессами. Операции над процессами


В соответствии с жизненным циклом процесса его выполнение может быть многократно прервано и продолжено. Для того, чтобы возобновить выполнение процесса, необходимо восстановить состояние его операционной среды. Состояние операционной среды отображается состоянием регистров и программного счетчика, режимом работы процессора, указателями на открытые файлы, информацией о незавершенных операциях ввода-вывода, кодами ошибок выполняемых данным процессом системных вызовов и т.д. Эта информация называется контекстом процесса.Кроме этого, операционной системе для реализации планирования процессов требуется дополнительная информация: идентификатор процесса, состояние процесса, данные о степени привилегированности процесса, место нахождения кодового сегмента и другая информация. В некоторых ОС (например, в ОС UNIX) информацию такого рода, используемую ОС для планирования процессов, называют дескриптором или блоком управления процесса.

Дескриптор процесса по сравнению с контекстом содержит более оперативную информацию, которая должна быть легко доступна подсистеме планирования процессов. Контекст процесса содержит менее актуальную информацию и используется операционной системой только после того, как принято решение о возобновлении прерванного процесса.

Очереди процессов представляют собой дескрипторы отдельных процессов, объединенные в списки. Таким образом, каждый дескриптор, кроме всего прочего, содержит, по крайней мере, один указатель на другой дескриптор, соседствующий с ним в очереди. Такая организация очередей позволяет легко их переупорядочивать, включать и исключать процессы, переводить процессы из одного состояния в другое.

В этой связи подсистема Управление процессом должна выполнять следующие операции над процессами:

1. Создание.

2. Уничтожение.

3. Запуск.

4. Блокировка.

5. Приостановка.

6. Возобновление, а также

7. Изменение диспетчерского приоритета процесса (работа с очередями).

Создание состоит из многих этапов:

• присвоение идентификатора процессу;

• включение его в список активных процессов, известных системе;

• формирование блока управления процессом;

• выделение процессу начальных ресурсов.

В общем случае существующий процесс может породить новый процесс и имеет место иерархическая структура процессов. Задача может порождать подзадачу в мультипрограммном режиме, и, в этом смысле, мы имеем родительский и дочерний процессы.

Уничтожение процесса означает удаление его из системы. Ресурсы возвращаются системе, имя процесса удаляется из списка, блок управления процессом освобождается.Блок управления процессом (Program Control Block – PCB) является центральным объектом в ОС, который определяет процесс и содержит всю необходимую информацию о процессе.

PCB содержит определенные сведения.

1. Текущее состояние процесса (Program Status Word - PSW).(Всего 5 состояний)

2. Уникальный идентификатор процесса.

3. Приоритет.

4. Указатели памяти процесса.

5. Указатели выданных процессу ресурсов.

6. Область сохранения регистров.

Когда ОС переключает ЦП с процесса на процесс, используется область сохранения регистров в PSB, чтобы запомнить информацию, необходимую для возобновления процесса, когда он снова получит ЦП.

Обработка прерываний состоит в следующем:

1. При возникновении прерывания, управление передается в ОС.

2. ОС запоминает состояние прерванного процесса, обычно в PCB прерванного процесса.

3. ОС анализирует тип прерывания и передает управление соответствующему обработчику прерываний.

4. После обработки прерывания ОС либо продолжает выполнять прерванный процесс, либо запускает готовый процесс с наивысшим приоритетом.


Управление процессами. Дополнительные состояния процесса


1. Приостановка готовности, когда процесс готов, но задержан и не конкурирует за ЦП.

2. Приостановка блокировки, когда процесс блокирован и задержан. То есть также не будет конкурировать за ЦП.

Дополнительные состояния процессов кратковременны и обычно используются в ОС РВ (реального времени при перегрузках ЦП.

В однопроцессорных ЭВМ в каждый момент времени может выполняться только один процесс и поэтому, когда один процесс активен, то несколько процессов могут находиться в других состояниях, т.е. находятся в соответствующих очередях (готовности, блокировки и др.). Очередью называется упорядоченный по приоритетам список процессов, ожидающих доступ к некоторому вычислительному ресурсу.

В ходе жизненного цикла каждый процесс переходит из одного состояния в другое в соответствии с алгоритмом планирования процессов, реализуемым в данной операционной системе. Когда в ОС поступает задание на обслуживание, создается процесс, который устанавливается в очередь готовых процессов.

1. Процесс постепенно продвигается в очереди и, когда очередь подходит при освобождении ЦП, процесс переходит в состояние активности. Предоставление ЦП процесса называется запуском или выбором процесса для выполнения. Эту функцию выполняет системная программа, называющаяся диспетчером.

2. Процесс, получивший ЦП, выполняется. Для предотвращения случайного, либо умышленного монопольного захвата ресурсов ЭВМ каким-либо процессом устанавливается временной интервал, называющийся квантом времени, в течение которого процессу разрешено занимать ЦП. Этот интервал устанавливается аппаратным таймером прерываний. По истечении кванта времени диспетчер возвращает процесс в состояние готовности и выбирает следующий готовый процесс.

3. Если выполняемый процесс до истечения кванта запрашивает какое-либо внешнее событие (обычно ввод/вывод), то добровольно освобождает ЦП, переводится в очередь блокировки до наступления события, безвозвратно теряет остаток кванта.

4. При наступлении события (завершении операции ввода/вывода) процесс переводится в состояние готовности.

Операции приостановки и возобновления играют важную роль в ОС РВ и используются в следующих случаях:

• при пиковой нагрузке ВС, когда она не может обеспечить требуемое быстродействие, когда расходы времени на смену состояний превышают полезную работу;

• при ненадежной работе системы и возможном ее отказе;

• когда промежуточные результаты работы процесса вызывают сомнение в правильности работы программы.

При приостановке процесс обязательно освобождает ОП, его копия сбрасывается на диск, в специальный свопинг файл (swaping). Также могут быть освобождены и другие ресурсы.

5. В активном состоянии инициатором приостановки в однопроцессорной системе может быть сам процесс, а в мультипроцессорной – и другие процессы. В остальных состояниях – другие процессы (внешние события).

6. Возобновление (или активизация) процесса это операция подготовки процесса к повторному запуску с точки приостановки.

6. По завершении выполнения задания процесс уничтожается.

Все смены состояний происходят по прерываниям.

Прерывание – это событие/сигнал, привлекающий внимание ЦП и заставляющий его изменить текущий порядок исполнения команд процесса. Существуют аппаратные и программные прерывания.Аппаратные прерывания инициируются аппаратурой (например, сигнал микросхемы таймера в IBM PC вырабатывается 18.2 раза в секунду), сигналом принтера, нажатием клавиш клавиатуры и многими другими причинами.Программные прерывания инициируются процессом и на самом деле ничего не прерывают. Это обычные процедуры, которые используются программами для выполнения стандартной рутиной работы. Однако, эти программы содержатся в ОС, и механизм прерываний дает возможность обратиться к ним из программ пользователей. Программные прерывания могут выдаваться внутри друг друга (быть вложенными). Например, аппаратные прерывания могут возникнуть при выполнении программных прерываний. Когда разрешенное прерывание вызывается, то ЦП оставляет свою работу, выполняет прерывание, а затем возвращается в место прерывания. Управляет прерываниями обработчик прерываний (Interrupt Handler)




Управление процессами. Основные состояния процесса


1. Состояние активности, когда процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором.

2. Состояние готовности, когда процесс имеет все требуемые для него ресурсы, он готов выполняться, однако процессор занят выполнением другого процесса.

Состояние блокировки или ожидания, когда процесс не может выполняться по своим внутренним причинам, он ждет осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса.


Сервисы операционных систем


• выполнение программ - способность системы загружать программу в память и выполнять ее;

• операции ввода/вывода, поскольку пользовательские программы не могут исполнять операции ввода/вывода непосредственно, ОС должна обеспечивать некоторые средства для их выполнения;

• манипуляции с файловой системой выражаются в обеспечении способности читать, писать, создавать и удалять файлы;

• взаимодействие и обмен информацией между выполняющимися процессами на одном компьютере или на различных системах, связанных посредством сети применяется через распределенную память или передачу сообщений;

• обнаружение ошибок - гарантия правильности вычислений посредством обнаружения ошибок в процессоре, памяти, устройствах ввода/вывода или в пользовательских программах.


Структура ОС. Командный интерфейс системы


В состав операционной системы входят следующие подсистемы:

Управление процессами;

Управление основной памятью;

Управление внешней памятью;

Управление устройствами ввода/вывода;

Управление файлами;

Защита системы;

Сетевая поддержка;

Командный интерфейс системы.



Множество команд в ОС предназначено для выполнения функций управления, которые имеют дело с:

• созданием и управлением процессов;

• управлением вводом/выводом;

• управлением внешней памятью;

• управлением основной памятью;

• доступом к файловой системе;

• защитой;

• сетевым обеспечением.

Программа, которая читает и интерпретирует команды управления, называется различным образом:

• интерпретатор управляющих карт;

• процессор команд консолей

• shell ( в Unix)

Их функцией является принять и выполнить очередное утверждение.






















Структура ОС. Сетевое обеспечение


В состав операционной системы входят следующие подсистемы:

Управление процессами;

Управление основной памятью;

Управление внешней памятью;

Управление устройствами ввода/вывода;

Управление файлами;

Защита системы;

Сетевая поддержка;

Командный интерфейс системы.

Распределенная система - набор процессоров, которые не распределяют память или каждый процессор имеет свою локальную память. Процессоры в системе соединены посредством компьютерной сети и обеспечивают пользователям доступ к различным системным ресурсам, позволяющим:

• увеличить скорость вычислений;

• увеличить объем доступной информации;

• повысить надежность


Структура ОС. Защита системы


В состав операционной системы входят следующие подсистемы:

Управление процессами;

Управление основной памятью;

Управление внешней памятью;

Управление устройствами ввода/вывода;

Управление файлами;

Защита системы;

Сетевая поддержка;

Командный интерфейс системы.

Защита системы предполагает наличие механизма для управления доступом программ, процессов и пользователей к системным и пользовательским ресурсам.

Механизм защиты должен:

• различать авторизованное и не авторизованное использование;

• определить элементы управления, которые будут задействованы;

• обеспечить средства реализации.
































Структура ОС. Подсистема управления файлами


В состав операционной системы входят следующие подсистемы:

Управление процессами;

Управление основной памятью;

Управление внешней памятью;

Управление устройствами ввода/вывода;

Управление файлами;

Защита системы;

Сетевая поддержка;

Командный интерфейс системы.



Файл представляет собой набор взаимосвязанной информации, определенной при создании. Кроме собственно данных, файлы представляют программы, как в исходном, так и в объектном виде.

Подсистема ОС отвечает за следующие действия в связи с управлением файлами:

• создание файлов;

• создание и удаление подкаталогов;

• поддержка операций для манипулирования с файлами и подкаталогами;

• представление файлов во внешней памяти;

• выгрузка файлов на другие внешние устройства.


Структура ОС. Подсистема управления устройствами ввода/вывода


Подсистема ввода/вывода состоит из:

• системы кэширования - буферирования;

• общего интерфейса драйверов устройств;

• драйверов специализированных устройств.








Структура ОС. Управление внешней памятью


В состав операционной системы входят следующие подсистемы:

Управление процессами;

Управление основной памятью;

Управление внешней памятью;

Управление устройствами ввода/вывода;

Управление файлами;

Защита системы;

Сетевая поддержка;

Командный интерфейс системы.

Поскольку основная память (первичная память) энергозависима и слишком мала для размещения всех данных и программ постоянно, ВС должна обеспечить вторичную память для сохранения основной памяти. Большинство современных ВС используют диски как средство оперативного хранения, как программ так и данных. ОС отвечает за следующие действия в связи с управлением внешней памятью:

• управление свободным пространством;

• распределение памяти;

• управление диском.








Структура ОС. Управление основной памятью


В состав операционной системы входят следующие подсистемы:

Управление процессами;

Управление основной памятью;

Управление внешней памятью;

Управление устройствами ввода/вывода;

Управление файлами;

Защита системы;

Сетевая поддержка;

Командный интерфейс системы.

Память представляет собой большой массив слов или байт, каждый из которых имеет собственный адрес. Это хранилище данных, к которым обеспечивается быстрый доступ, распределенный между процессором и устройствами ввода/вывода. Основная память энергозависимое устройство и теряет содержимое в случае разрушения системы. ОС отвечает за следующие действия в связи с управлением памятью:

• ведет учет о том, какая часть памяти в настоящий момент используется;

• принимает решение о загрузке процессов при освобождении пространства ОП;

• распределяет и освобождает пространство ОП в соответствии с действующими стратегиями.




Структура ОС. Управление процессами


В состав операционной системы входят следующие подсистемы:

1. Управление процессами;

2. Управление основной памятью;

3. Управление внешней памятью;

4. Управление устройствами ввода/вывода;

5. Управление файлами;

6. Защита системы;

7. Сетевая поддержка;

8. Командный интерфейс системы.

Процесс - это программа в стадии выполнения. Процессу необходимы определенные ресурсы, включая процессорное время, память, файлы и устройства ввода/вывода для выполнения своих задач. ОС отвечает за следующие действия в связи с управлением процессами:

• создание и удаление процессов;

• приостановка и возобновление процессов;

• обеспечение механизмов для синхронизации процессов;

• обеспечение механизмов для взаимодействия процессов.












Принципы построения ОС


ОС различаются по назначению, выполняемым функциям, формам реализации. Тем не менее, в основу их создания заложены общие принципы.

1. Частотный принцип. Для действий, которые часто встречаются при работе с ОС, обеспечиваются условия их быстрого выполнения.

2. Принцип модульности. Модуль – функциональный элемент системы, имеющий оформление, законченное и выполненное в пределах требований системы, и средства сопряжения с другими модулями. Модули бывают однократными, многократными и реентерабельными.

3. Принцип функциональной избирательности. Используется при формировании ядра ОС. Модули "под рукой".

4. Принцип генерируемости. Настройка средств ОС, исходя из конкретной конфигурации ЭВМ и круга решаемых проблем (OS/2, Windows, UNIX).

5. Принцип функциональной избыточности. Проведение одной и той же работы различными средствами ОС -MFT, MVT, SVM.

6. Принцип умолчания. Он основан на хранении в системе некоторых данных, которые назначаются объектам ОС в случае их не указания.

7. Принцип перемещаемости. Построение модулей, исполнение которых не зависит от места расположения в ОП.

8. Принцип защиты. Он предполагает необходимость разработки мер, ограждающих программы и данные пользователей от нежелательных влияний друг на друга. (Привилегированные команды. Границы области адресации.).

9. Принцип независимости программ от внешних устройств. Связь программы с конкретным устройством устанавливается не на уровне трансляции, а в период ее исполнения.




Основные характеристики ОС


Вычислительный процесс представляет собой программу или задачу в стадии выполнения. Вычислительным ресурсом называется любой объект вычислительной системы, необходимый для выполнения процесса. Вычислительные ресурсы по способу возможного использования подразделяются на:

• монопольные, которые могут использоваться только одной программой (печать, МЛ);

• разделяемые, которые допускают их совместное использование одновременно несколькими процессами (НМД, ОП).

В мультипрограммных и мультипроцессорных системах требуется разделение всех ресурсов, что и породило их виртуализацию.

Особенности алгоритмов управления ресурсами. От эффективности алгоритмов управления локальными ресурсами компьютера во многом зависит эффективность всей ОС в целом. Так, например, в зависимости от особенностей использованного алгоритма управления процессором, операционные системы делят на многозадачные и однозадачные, многопользовательские и однопользовательские, на системы, поддерживающие многонитевую обработку и не поддерживающие ее, на многопроцессорные и однопроцессорные системы.

Поддержка многозадачности. По числу одновременно выполняемых задач операционные системы могут быть разделены на два класса:

однозадачные (например, MS-DOS, MSX) и

многозадачные (OC EC, OS/2, UNIX, Windows 95).

Однозадачные ОС в основном выполняют функцию предоставления пользователю виртуальной машины, делая более простым и удобным процесс взаимодействия пользователя с компьютером. Однозадачные ОС включают средства управления периферийными устройствами, средства управления файлами, средства общения с пользователем.

Многозадачные ОС, кроме вышеперечисленных функций, управляют разделением совместно используемых ресурсов, таких как процессор, оперативная память, файлы и внешние устройства.

Поддержка многопользовательского режима. По числу одновременно работающих пользователей ОС делятся на:

однопользовательские (MS-DOS, Windows 3.x, ранние версии OS/2);

многопользовательские (UNIX, Windows NT).

Главным отличием многопользовательских систем от однопользовательских является наличие средств защиты информации каждого пользователя от несанкционированного доступа других пользователей. Следует заметить, что не всякая многозадачная система является многопользовательской, и не всякая однопользовательская ОС является однозадачной.

Вытесняющая и невытесняющая многозадачность. Важнейшим разделяемым ресурсом является процессорное время. Способ распределения процессорного времени между несколькими одновременно существующими в системе процессами (или нитями) во многом определяет специфику ОС. Среди множества существующих вариантов реализации многозадачности можно выделить две группы алгоритмов:

вытесняющая многозадачность (Windows NT, OS/2, UNIX).

невытесняющая многозадачность (NetWare, Windows 3.x);

Основным различием между вытесняющим и не вытесняющим вариантами многозадачности является степень централизации механизма планирования процессов. В первом случае механизм планирования процессов целиком сосредоточен в операционной системе, а во втором - распределен между системой и прикладными программами. При невытесняющей многозадачности активный процесс выполняется до тех пор, пока он сам, по собственной инициативе, не отдаст управление операционной системе для того, чтобы та выбрала из очереди другой готовый к выполнению процесс. При вытесняющей многозадачности решение о переключении процессора с одного процесса на другой принимается операционной системой, а не самим активным процессом.

Поддержка многонитевости. Важным свойством операционных систем является возможность распараллеливания вычислений в рамках одной задачи. Многонитевая ОС разделяет процессорное время не между задачами, а между их отдельными ветвями (нитями).

Многопроцессорная обработка. Другим важным свойством ОС является отсутствие или наличие в ней средств поддержки многопроцессорной обработки - мультипроцессирование. Мультипроцессирование приводит к усложнению всех алгоритмов управления ресурсами.

В наши дни становится общепринятым введение в ОС функций поддержки многопроцессорной обработки данных. Такие функции имеются в операционных системах Solaris 2.x фирмы Sun, Open Server 3.x компании Santa Crus Operations, OS/2 фирмы IBM, Windows NT фирмы Microsoft и NetWare 4.1 фирмы Novell.

Многопроцессорные ОС могут классифицироваться по способу организации вычислительного процесса в системе с многопроцессорной архитектурой: асимметричные ОС и симметричные ОС. Асимметричная ОС целиком выполняется только на одном из процессоров системы, распределяя прикладные задачи по остальным процессорам. Симметричная ОС полностью децентрализована и использует весь пул процессоров, разделяя их между системными и прикладными задачами.

Важное влияние на облик операционной системы в целом, на возможности ее использования оказывают особенности и других подсистем управления локальными ресурсами – подсистем управления памятью, файлами, устройствами ввода-вывода.

Специфика ОС проявляется и в том, каким образом она реализует сетевые функции: распознавание и перенаправление в сеть запросов к удаленным ресурсам, передача сообщений по сети, выполнение удаленных запросов. При реализации сетевых функций возникает комплекс задач, связанных с распределенным характером хранения и обработки данных в сети: ведение справочной информации обо всех доступных в сети ресурсах и серверах, адресация взаимодействующих процессов, обеспечение прозрачности доступа, тиражирование данных, согласование копий, поддержка безопасности данных.
















Эволюция операционных систем (4 периода развития)


Поколения ОС также как и аппаратные средства отражают достижения в области электронных компонентов: 1 поколение – лампы, 2 поколение – транзисторы, 3 поколение – интегральные микросхемы (ИС), 4 поколение большие и сверхбольшие интегральные схемы – БИС и СБИС. Поколения компьютеров отличаются:

• стоимостью, габаритами, мощностью;

• быстродействием и объемом памяти.

Рассмотрим эволюцию операционных систем.

0 поколение (40 - 50 годы) - ОС отсутствует. Полный доступ к ресурсам ЭВМ на машинном языке, все программы разрабатываются в двоичном коде. Этот период характеризуется высокой стоимостью приобретения и эксплуатации компьютеров и низкой стоимостью труда программистов. Компьютеры использовались в монопольном интерактивном режиме. Основная цель – максимизировать использование аппаратного обеспечения. Основной режим работы компьютера – простой и ожидание каких-либо действий программиста. При этом наблюдается недостаточное использование дорогостоящего вычислительного оборудования.

1 поколение (60-е годы). Возникла система пакетной обработки. В каждый момент времени ЭВМ использовалась для решения одной прикладной программы. Пользователи уже не работают с ЭВМ на физическом уровне. Программы и данные принимает человек-оператор. Задание на обработку формируется в виде пакета, представляющего собой совокупность отдельных программ и данных, разделенных специальными символами. Пакет может быть составлен на перфокартах или МЛ. Управляющая программа должна выполнять внутрисистемные операции управления, которые пользователь осуществлял ранее на физическом уровне. Дополнительно эта программа должна автоматически переключать машину на исполнение программ из пакета по последовательной схеме (FIFO). Такую системную программу можно назвать простейшей ОС, обеспечивающей обработку программ в однопрограммном пакетном режиме.

Недостатки:

1. Использование части машинного времени (времени процессора) на выполнение системной управляющей программы.

2. Программа, получившая доступ к процессору, обслуживается до ее завершения. При этом если возникает потребность в передаче данных между внешними устройствами и ОП, то процессор простаивает, ожидая завершения операции обмена. С другой стороны при работе процессора простаивают внешние устройства. Для персонального компьютера проявление фактора простоя процессора не столь существенно, так как стоимость его не велика, чего не скажешь о больших и дорогих ЭВМ.

Этот недостаток однопрограммного режима был устранен в мультипрограммном пакетном режиме (65-75 г.г.) в ОС второго поколения. Главной целью и критерием эффективности систем пакетной обработки является максимальная пропускная способность, то есть решение максимального числа задач в единицу времени. Для этой цели в начале работы формируется пакет заданий, содержащих требования к системным ресурсам. Из этого пакета формируется мультипрограммная смесь из заданий, предъявляющих отличающиеся требования к ресурсам для того, чтобы обеспечить сбалансированную нагрузку всех устройств ЭВМ. В системах пакетной обработки переключение процессов с выполнения одной задачи на другую происходит только в том случае, если активная задача сама отказывается от процессора, например, для выполнения операции ввода/вывода, что делает невозможным выполнение интерактивных задач.

Особенностью этого поколения было и то, что ОС создавались как системы коллективного пользования с мультипрограммным режимом работы и как первые системы мультипроцессорного типа. В таких системах несколько пользовательских программ одновременно присутствуют в оперативной памяти компьютера и центральный процессор (ЦП) динамически переключается с решения одной задачи на решение другой задачи. При этом появляется возможность одновременной загрузки ЦП и устройств ввода-вывода. В случае многопроцессорных систем единый вычислительный комплекс (ВК) содержит несколько процессоров, что повышает вычислительную мощность вычислительной системы (ВС).

В то же время появились методы, обеспечивающие независимость программирования от внешних устройств. В программе необходимо указывать только тип устройства, а не программировать его физический адрес. Конкретный адрес устройства определялся в процессе выполнения программы. Это было серьезное достижение в развитии ОС.

В этот период были разработаны системы с разделением времени (РВ), предоставляющие пользователям возможность непосредственно взаимодействовать с компьютером при помощи терминалов телетайпного типа (электронная пишущая машинка, имеющая интерфейс с ЭВМ), а в последующем и с помощью дисплея. При работе с такими ОС используется диалоговый или интерактивный режим. в режиме разделения времени (РРВ) каждый пользователь имеет непосредственный доступ к ЭВМ через свой терминал. Суть разделения времени: Каждой программе, готовой к исполнению, для работы выделяется фиксированный, заранее определенный интервал времени, называемый квантом. Программа в течение одного кванта может быть не выполнена до конца, тогда она прерывается в момент окончания кванта и помещается в конец очереди. Из начала очереди извлекается другая программа, которой планируется фиксированный интервал. При этом ни один из пользователей, работающих за дисплеем, параллельно друг с другом, никак не ощущает, что процессор мультиплексируется несколькими программами.

К этому же периоду относится появление первых систем реального времени (СРВ), в которых ЭВМ применяется для управления техническими объектами, такими, например, как станок, спутник, и т.п. Во всех этих случаях существует предельно допустимое время, в течение которого должна быть выполнена та или иная программа, управляющая объектом, в противном случае может произойти авария. Характерным для СРВ является обеспечение заранее заданных интервалов времени реакции на предусмотренные события для получения управляющего воздействия. Поскольку в технологических процессах промедление может привести к не желаемым и даже опасным последствиям, СРВ работают со значительной недогрузкой, так как важнейшей характеристикой является постоянная готовность системы – ее реактивность.

Системное программное обеспечение (СПО) ОС этого периода решало множество проблем, связанных с защитой данных и результатов работы различных программ, защитой данных в оперативной памяти и распределением устройств. Кроме того, ОС должна управлять новыми устройствами, входящими в состав аппаратного обеспечения. ОС третьего поколения (70-80 г.г.) были многорежимными системами, обеспечивающими пакетную обработку, разделение времени, режим реального времени и мультипроцессорный режим. Они были громоздкими, дорогостоящими (монстры операционных систем). Например, фирме IBM разработка ОС/360 стоила 6 млрд. долларов. Такие ОС, будучи прослойкой, между пользователем и аппаратурой ЭВМ, привели к значительному усложнению вычислительной обстановки. Для выполнения простейшей программы необходимо было изучать сложные языки управления заданием (JCL – Job Control Language). К этому периоду относится появление вытесняющей многозадачности (Preemptive scheduling), и использование концепции баз данных для хранения больших объемов информации для организации распределенной обработки. Вводится приоритетное планирование (Prioritized scheduling) и выделение квот на использование ограниченных ресурсов компьютеров (процессорного времени, дисковой памяти, физической (оперативной) памяти). При использовании компьютеров широкое распространение получила концепция распределения времени (time sharing) , но ограниченность ресурсов приводила к перегрузке компьютеров и к неприемлемому времени ожидания ответа или результатов работы. Программистам приходилось компенсировать это неудобство работой в ночное время.

Четвертое поколение с середины 70-х. Период характеризуется уменьшением стоимости компьютеров и увеличением стоимости труда программиста. Появление персональных компьютеров позволило установить компьютер практически каждому пользователю на рабочем столе. Благодаря широкому распространению вычислительных сетей и средств оперативной обработки (режим on-line), пользователи получают доступ к территориально распределенным компьютерам. Появились микропроцессоры, на основе которых создаются все новые и новые PC, которые могут быть использованы, как автономно, так и в качестве терминалов более мощных вычислительных систем. При передаче информации по линиям связи усложняются проблемы защиты информации, шифрования данных. Возникло понятие сетевого компьютера (Network computer) , способного получать все ресурсы через компьютерную сеть. Понятие файловой системы распространяется на данные, доступные по различным сетевым протоколам.

Число людей, пользующихся компьютером, значительно возросло, что выдвигает требование дружественного интерфейса пользователя, ориентации на неподготовленного пользователя. Появились системы с управлением с помощью меню и элементов графического интерфейса. Начала широко распространяться концепция виртуальных машин. Пользователь более не заботится о физических деталях построения ЭВМ или сетей. Он имеет дело с функциональным эквивалентом компьютера, создаваемым для него ОС, представляющим виртуальную машину. Таким образом, возникла концепция виртуализации ресурсов ЭВМ. Виртуальным ресурсом называется функциональный программно моделируемый эквивалент реального монопольного ресурса, допускающий его совместное использование многими процессами. Мультипрограммирование – виртуализация центрального процессора (ЦП – CPU). Буферный ввод/вывод – виртуализация устройств ввода и вывода.

В настоящее время концепция виртуальных машин находит все большее распространение. Виртуальная машина – это функциональный эквивалент реальной ЭВМ, обеспечивающий пользователей на основе одной ЭВМ множество функционально эквивалентных ей ЭВМ.

Широкое внедрение получила концепция распределенной обработки данных. Развитием распределенной обработки данных стала технология Клиент - Сервер, в которой серверный процесс предоставляет возможность использовать свои ресурсы клиентскому процессу по соответствующему протоколу взаимодействия.






















Определение операционной системы. ОС как расширенная машина. ОС как система управления ресурсами.


Это набор программ (обычных и микро), которые обеспечивают возможность использования аппаратуры компьютера. При этом аппаратура предоставляет сырую вычислительную мощность, а задача операционной системы состоит в предоставлении аппаратуры для пользователя в удобном для него виде.

Главные цели разработчиков операционной системы:

1. Эффективное использование всех компьютерных ресурсов.

2. Повышение производительности труда программистов.

3. Простота, гибкость, эффективность и надежность организации вычислительного процесса.

4. Обеспечение независимости прикладных программ от аппаратного обеспечения (АО).

Современные вычислительные системы состоят из процессоров, памяти, таймеров, дисков, накопителей на магнитных лентах (МЛ), сетевой коммуникационной аппаратуры, принтеров и других устройств. Функцией ОС является распределение процессоров, памяти, устройств и данных между процессами, конкурирующими за эти ресурсы. ОС должна управлять всеми ресурсами вычислительной машины, обеспечивая максимальную эффективность ее функционирования. Критерием эффективности может быть, например, пропускная способность или реактивность системы. Таким образом, ОС реализует:

• интерфейс пользователя (команды в MS DOS, UNIX; графический интерфейс в ОС Windows);

• разделение аппаратных ресурсов между пользователями (в многопользовательской и многозадачной ОС);

• работу в локальных и глобальных сетях;

• возможность работы с общими данными в режиме коллективного пользования;

• планирование доступа пользователей к общим ресурсам;

• эффективное выполнение операций ввода-вывода;

• восстановление данных и вычислительного процесса в случае ошибок.




Определение операционной системы. ОС как расширенная машина. ОС как система управления ресурсами.


2. Эволюция операционных систем (4 периода развития)

3. Основные характеристики ОС

4. Принципы построения ОС

5. Структура ОС. Управление процессами

6. Структура ОС. Управление основной памятью

7. Структура ОС. Управление внешней памятью

8. Структура ОС. Подсистема управления устройствами ввода/вывода

9. Структура ОС. Подсистема управления файлами

10. Структура ОС. Защита системы

11. Структура ОС. Сетевое обеспечение

12. Структура ОС. Командный интерфейс системы

13. Сервисы операционных систем

14. Управление процессами. Основные состояния процесса

15. Управление процессами. Дополнительные состояния процесса

16. Управление процессами. Операции над процессами

17. Управление процессами. Основная концепция обработки прерываний

18. Управление реальной памятью. Основные задачи подсистемы управления памятью

19. Управление реальной памятью. Стратегия выборки

20. Управление реальной памятью. Стратегия размещения

21. Управление реальной памятью. Стратегия замещения

22. Управление реальной памятью. Страничная организация памяти

23. Управление реальной памятью. Общие недостатки реальной ОП

24. Концепция виртуальной памяти

25. Четыре способа организации виртуальной памяти

26. Управление виртуальной памятью. Стратегия вталкивания

27. Управление виртуальной памятью. Стратегия размещения

28. Управление виртуальной памятью. Стратегия выталкивания (замещения)

29. Динамическая страничная организация виртуальной памяти

30. Сегментная организация виртуальной памяти

31. Комбинированная странично-сегментная организация виртуальной памяти

32. Двухуровневая страничная организация виртуальной памяти

33. Алгоритмы планирования процессов. Планирование на верхнем уровне или планирование заданий.

34. Алгоритмы планирования процессов. Планирование на нижнем уровне или диспетчирование процессов.

35. Алгоритмы планирования процессов. Планирование на промежуточном уровне.

36. Алгоритмы планирования процессов. Сеть многоуровневых очередей.

37. Два вида мультипроцессорных вычислительных систем

38. Мультипроцессорные системы с подчиненными процессорами

39. Мультипроцессорные системы с равноправными процессорами

40. Физическая организация периферийных устройств

41. Организация программного обеспечения ввода-вывода

42. Независимый от устройств слой операционной системы

43. Обработка прерываний периферийных устройств

44. Драйверы устройств

45. Пользовательский слой программного обеспечения

46. Способы доступа и организации файлов






Информатика 1 рубежный контроль

1. Информация – это:@ сведения об объектах и явлениях окружающей среды, их параметрах, свойствах и состоянии, которые уменьшают имеющуюся о них степень неопределенности, неполноты знаний.

2. Что изучает информатика? @ отрасль науки, изучающая структуру и общие свойства научной информации, а также вопросы, связанные с ее сбором, хранением, поиском, переработкой, преобразованием, распространением и использованием в различных сферах деятельности.

3. Первые электронные вычислительные машины появились @ в 1946 г

4. Информацию, существенную и важную в настоящий момент называют: @ актуальной

5. Наименьшей единицей информации в компьютере является:@ бит ,1или0

6. Данные - это:@ отдельные факты, характеризующие объекты, процессы и явления в предметной области, а также их свойства.

7. Основное понятие информатики (наряду с понятием информации): @ это наука, изучающая все аспекты получения, хранения, преобразования, передачи и использования информации

8. Дайте определение прикладному программному обеспечению:@ программа, предназначенная для выполнения определенных пользовательских задач и рассчитанная на непосредственное взаимодействие с пользователем

10. Гигабайт:@ кратная единица измерения количества информации 1024 мб

14. Информация:@ это некоторый набор систематизированных сведений об определенной области окружающего мира

12. Информационный взрыв:@ резкое увеличение объема информации, которую должен воспринять, хранить и использовать человек в процессе своей трудовой деятельности.

14. Бит – это один символ:@ 1 или 0

15. Какое количество информации можно передать с помощью 1 Байт: @ 8 бит

16. Система, предназначенная для хранения, поиска и выдачи информации по запросам пользователей: @ Информационная система

17. В какой стране создан первый компьютер? @ в нацистской Германии

18. В качестве основной единицы измерения информации принимается @ 1 бит

19. Байт – это: @ Более крупная единица информации байт = 8 бит.

20. В одном мегабайте содержится:@ 210Кбайт = 1024Кбайт = 220 байт.

21. В одном гигабайте содержится:@ 1024 мб ,210Мбайт = 220Кбайт = 230 байт

22. Что представляет собой 1 бит:@ Наименьшей единицей информации является бит (от англ. binary digit – двоичный разряд).

23. Свойства информации @ Объективность ,Достоверность,Полнота,Актуальность,Полезность,Доступность

24. Информатика – это наука о @ способах и методах представления, обработки, передачи и хранения информации с помощью ЭВМ.

25. Максимальное количество чисел, кодируемых 8 битами.@ 2^8=256

26. Знак, указывающий место на экране, куда попадет набранный символ с клавиатуры, называют …: Курсор

27. Какую из следующих клавиш необходимо нажать чтобы, включить и выключить режим работы дополнительной клавиатуры.@ NumLock

28. Для отмены какого-либо действия следует нажать клавишу: @ Escape

29. Для фиксации режима прописных букв следует нажать клавишу:@ Caps Lock

30. Процессор предназначен: выполняет арифметические и логические операции, заданные программой преобразования информации, управляет вычислительным процессом и координирует работу периферийных устройств системы

31. Функция клавиши Delete:@ операция удаления текстовых процессов

32. Сочетание клавиш PRINT SCREEN используется:@ при нажатии Print Screen будет «сфотографирован» экран полностью.

33. Что такое клавиатура?@ это устройство, предназначенное для ввода информации от пользователя в компьютер.

34. Процессор предназначен.@ устр-во, производящее набор операций над данными, представленными в цифровой форме (двоичным кодом).

35. У лазерного принтера по сравнению со струйным. стоимость,скорость,качество,размер

36. Устройствами для ввода информации являются:cканер,клавиш,мышь,джойстик,

37. Укажите единицу измерения тактовой частоты, определяющей быстродействие компьютера: МГц – миллион тактов в секунду.

38. Объем памяти ЭВМ может быть измерена: в байтах (1байт-8бит)

39. Информация на дисках хранится в виде: папок с файлами

40. Поименованная область памяти на диске, в котором хранится программа, данные, тексты, графические информации: Файл

41. В состав персонального компьютера не входит 4) комплекс мультимедиа:

42. В состав персонального компьютера входит

2) системный блок; 2) монитор; 3) клавиатура

43. Чтобы компьютер мог обрабатывать данные, от него требуются способности: перевод информацию из аналоговую форму в цифровую,

44. Введенные в память компьютера сведения не могут быть: услышаны

45. Какое из устройств называют "мозгом" компьютера?: процессор

46. Характеристикой процессора является его 1) быстродействие; 3) частота; Вставьте, пропущено слово. Компьютер может читать команды, которые находятся в его ... : памяти

47. Вставьте, пропущено слово. Вся информация, введенная в ... компьютера, стирается при выключении питания: оперативной памяти

48. Устройство, из которого процессор берет программы и исходные данные для обработки, а также записывает полученные результаты: из оперативной памяти

49. Какое устройство не является устройством вывода: цифровая видеокамера

50. Минимальный набор устройств необходимых для работы компьютера: системный блок, монитор, клавиатура, мышь.

51. Курсор мыши по экрану перемещается под управлением:; 2) клавиш управления курсором;

52. Функция клавиш на дополнительной клавиатуре меняется с помощью клавиши NumLock

53. Какая клавиша поможет отказаться от выполнения команды? Escape

54. Для перемещения курсора на начало строки нужно нажать клавишу …

55. В 1 байте содержится 8 бит.

56. …. управляет работой компьютера и выполняет вычисления. микропроцессор

57. Что такое файл? Это раздел памяти находящийся на физическом носителе и необходимый для хранения данных

58. Основными функциями операционной системы являются:4) запуск программ на выполнение:

59. Устройствами внешней памяти являются:

9) накопители на гибких магнитных дисках;

11) накопители на жестких магнитных дисках;



60. Программа оболочка…: программы обеспечивающие более удобный и наглядный способ общения пользователя ПК, чем штатные средства операционных систем. Для MS DOS используют оболочки: Norton Commander, Volkov Commander. Для Windows: FAR, Windows Commander.

61. Копирование файла возможно клавишей Сtrl +C…

62. Какая клавиша поможет перейти в другое окно на экране? Alt+F6

63. Функция команды Md: MKDIR можно использовать для создания многоуровневой структуры каталогов.

64. Функция команды Rd.: rmdir, удалить директорию.

65. Функция команды Cd: изменить текущую директорию

66. Функция команды Rename: Переименовывает файл или директорию, переместить файл

67. Какой командой можно увидеть содержимое файла: Linux,сat

68. Выйти из программы NC можно клавишей F10

69. Вызвать главное меню можно клавишей …Ctrl+Shift+Esc

70. Что такое каталог (папка)? специальное место на диске в которой хранится информация об именах файлов, их размере, дате последнего обновления. еще называют директория, фолдер

71. Меню – это: элемент интерфейса пользователя, позволяющий выбрать одну (в простейшем случае) из нескольких перечисленных опций.

72. Элементы стандартного окна: строка заголовка, рамка и рабочая область

73. Панель задач – это: приложение, которое используется для запуска других программ или управления уже запущенными, и представляет собой панель инструментов

74.

75. Строка состояния - это: В этой строке отображаются различные параметры и характеристики выбранного файла или объекта

76. Что такое файл? это поименованная область на диске или другом носителе информации.

77. В Windows различают следующие окна: 1) программное окно;

78. Скопировать файл можно командой: Ctrl+C

79. Видеомонитор может работать в режимах:2) текстовом; 4) графическом.

154. Файл – это: поименованная область на диске.

155. Windows 98 – это: графическая OC

156. Рабочий стол в Windows 98 – это: это область, появляющаяся на экране при запуске Windows 98.

179.К стандартным программам Windows относятся:3) Калькулятор 4) Word.

180. Программа, позволяющая сжать большой объем информации WinZip,WinRar

181. Потеря информации может произойти, например, по следующим причинам:

25) нарушение работы компьютера;

26) отключение или сбои питания;

27) повреждение носителей информации;

28) ошибочные действия пользователя;

182. На персональном компьютере потеря информации связана с:

29) действием компьютерных вирусов; 2) отключением или сбоем питания;

30) повреждением носителей информации; 4) ошибочными действиями пользователя.

183. Средство защиты от компьютерных вирусов. Архивирование, своевременная профилактика,

184. Программа, позволяющая сжать большой объем информации. WinZip,WinRar

185. Вопрос обеспечения информационной безопасности особо остро встал с развитием: С изобретением локальных и глобальных информационных систем

186. Укажите расширение архивных файлов:

187. Для отправки выделенного фрагмента в буфер, нажимаем комбинацию клавиш Сtrl+X

188. Бейсик – это семейство высокоуровневых языков программирования.

189. На блок-схеме оператор IF условие THEN представляется с помощью …

190. Оператор Бейсика END Обязательный. Завершает определение программного элемента.

191. Функция оператора Бейсик GOTO позволяет изменить последовательность выполнения шагов программы

192. Функция оператора Бейсик INPUT оператор ввода

193. Функция оператора Бейсик PRINT (вывод, печать) – оператор вывода

227. Какую из следующих клавиш необходимо нажать чтобы, удалить символ слева от курсора. BackSpace

231. Алгоритм – это: последовательность четко определенных действий, выполнение которых ведет к решению задачи.

232. Свойствами алгоритма являются:2) дискретность и массовость;

233.Алгоритм может быть задан следующими способами: 3) на алгоритмическом языке;

234. Установите правильную последовательность этапов решения задачи на ЭВМ:

32) постановка задачи и математическое описание задачи;

235. Арифметические выражения состоят из:

1) Чисел и констант; 2) переменных и функций;

3) круглых скобок; 4) команд MS-DOS и машинных команд;

239. Программа – это: последовательность инструкций, предназначенная для исполнения устройством управления вычислительной машины.

240. Компьютер, подключенный к сети и обеспечивающий ее пользователей определенными услугами. Сервер

241. По способу организации различают массивы:

2)одномерные; 4)двумерные.


Обработка ошибок запросов


Сообщение о последней ошибке можно получить через функцию mysql_error:

echo "Ошибка базы данных. MySQL пишет:", mysql_error();

Если результат функции пишется в переменную, можно проверить её:

$result = mysql_query($request);

if (!$result)

echo "Ошибка базы данных. MySQL пишет:", mysql_error();

else {

echo "<table>";

while ($row = mysql_fetch_array($result))

echo "<tr><td>", $row["field1"], "</td><td>", $row["field2"], "</td></tr>";

echo "</table>";

};

Если в переменную не пишем, то так:

$request = "UPDATE (...)";

mysql_query($request);

if (!mysql_error())

echo "Обновление данных прошло успешно!";

else echo "Ошибка базы данных. MySQL пишет:", mysql_error();

Если запрос генерируется автоматически, можно выводить и сам запрос (полезно создавать переменную, которая бы его содержала, и использовать её в качестве параметра функции).


Модифицирующие запросы MySQL


Пример 1. DELETE-запрос

<?php

/* соединямеся с базой данных */

mysql_pconnect("localhost", "mysql_user", "mysql_password") or

die("Could not connect: " . mysql_error());

mysql_select_db("mydb");



/* здесь функция вернёт корректное число удалённых записей */

mysql_query("DELETE FROM mytable WHERE id < 10");

printf ("Records deleted: %d
", mysql_affected_rows());



/* без указания WHERE в запросе, функция всегда возвращает 0 */

mysql_query("DELETE FROM mytable");

printf ("Records deleted: %d
", mysql_affected_rows());

?>

Пример 2. UPDATE-запрос

<?php

/* соединямеся с базой данных */

mysql_pconnect("localhost", "mysql_user", "mysql_password") or

die("Could not connect: " . mysql_error());

mysql_select_db("mydb");



/* Обновляем ряды */

mysql_query("UPDATE mytable SET used=1 WHERE id < 10");

printf ("Updated records: %d
", mysql_affected_rows());

mysql_query("COMMIT");

?>




Запрос-выборка и обработка результатов в MySQL


Механизм работы функций запросов к БД такой же, как и у функции соединения: функции передаются параметры запроса и (если надо) соединения, а результат записывается в переменную:

$result = mysql_db_query(string база данных, string запрос [, переменная соединения]);

или

$result = mysql_query(string запрос [, переменная соединения]);



ВНИМАНИЕ! Чтобы использовать функцию mysql_query, в которой база данных не указывается, надо предварительно выбрать используемую базу данных:

mysql_select_db(string база данных);

Теперь у нас есть переменная $result. Это указатель на результат выполнения запроса. Там есть сколько-то строк таблицы. Получить эти строки можно через функции mysql_fetch_row и mysql_fetch_array:



echo "<table>";



while ($row = mysql_fetch_array($result))



echo "<tr><td>", $row["field1"], "</td><td>", $row["field2"], "</td></tr>";



echo "</table>";

Функция mysql_fetch_array выдаёт в указанную переменную (в данном случае $row) массив, индексы которого - имена полей (причём, если вы в списке полей запроса пишете table.field, то индекс массива будет field). mysql_fetch_row выдаёт массив, индексы которого - числа, начиная с 0.

Какой функцией лучше пользоваться? Если вы запрашиваете звёздочку, т.е. все поля таблицы, а выводить поля нужно в определённой последовательноси (когда, например, у таблицы рисуется шапка), лучше пользоваться mysql_fetch_array. Если вы запрашиваете одно-два-три поля, чётко зная их последовательность, можно делать mysql_fetch_row - это уменьшит объем кода программы.




Соединение с сервером MySQL


mysql_close - Закрывает соединение с сервером MySQL

mysql_close

(PHP 4, PHP 5)

mysql_close — Закрывает соединение с сервером MySQL

Описание

bool mysql_close ([ resource $link_identifier ] )

mysql_close() закрывает непостоянное соединение с базой данных MySQL, на которое указывает переданный дескриптор. Если параметр link_identifier не указан, закрывается последнее открытое (текущее) соединение.

В использовании mysql_close() обычно нет надобности для непостоянных соединений, т.к. они автоматически закрываются в конце скрипта. См. также высвобождение ресурсов.

Список параметров

link_identifier

Соединение MySQL. Если не указано, то используется последнее соединение, открытое mysql_connect(). Если соединение не найдено или не установлено, то будет сгенерирована ошибка уровня E_WARNING.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

<?php

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');

if (!$link) {

die('Ошибка соединения: ' . mysql_error());

}

echo 'Успешно соединились';

mysql_close($link);

?>

Результат выполнения данного примера:

Успешно соединились

Примечания

Замечание:

mysql_close() не закрывает постоянные соединения, созданные функцией mysql_pconnect().


Администрирование базы данных


Администрирование базы данных – это функция управления базой данных (БД). Лицо ответственное за администрирование БД называется “Администратор базы данных” (АБД) или “Database Administrator” (DBA).



Функция “администрирования данных” стала активно рассматриваться и определяться как вполне самостоятельная с конца 60-х годов. Практическое значение это имело для предприятий, использующих вычислительную технику в системах информационного обеспечения для своей ежедневной деятельности. Специализация этой функции с течением времени совершенствовалась, но качественные изменения в этой области стали происходить с началом использования так называемых интегрированных баз данных. Одна такая база данных могла использоваться для решения многих задач.



Таким образом, сформировалось определение БД как общего информационного ресурса предприятия, которое должно находиться всегда в работоспособном состоянии. И как для каждого общего ресурса значительной важности, БД стала требовать отдельного управления. Во многих случаях это было необходимо для обеспечения её повседневной эксплуатации, её развития в соответствии с растущими потребностями предприятия. К тому же БД и технология её разработки постоянно совершенствовались и уже требовались специальные знания высокого уровня для довольно сложного объекта, которым стала база данных. Отсюда функция управления базой данных и получила название “Администрирование базы данных”, а лицо ею управляющее стали называть “Администратор баз данных”.




Сравнение массивов


Массивы можно сравнивать при помощи функции array_diff() и операторов массивов:

Операторы, работающие с массивами:

Пример Название Результат

$a + $b Объединение Объединение массива $a и массива $b.

$a == $b Равно TRUEв случае, если $a и $b содержат одни и те же элементы.

$a === $b Тождественно равно TRUE в случае, если $a и $b содержат одни и те же элементы в том же самом порядке.

$a != $b Не равно TRUE если массив $a не равен массиву $b.

$a <> $b Не равно TRUE если массив $a не равен массиву $b.

$a !== $b Тождественно не равно TRUE если массив $a не равен тождественно массиву $b.

Пример сравнения массивов:

<?php

$a = array("apple", "banana");

$b = array(1 => "banana", "0" => "apple");



var_dump($a == $b); // bool(true)

var_dump($a === $b); // bool(false)

?>




Удаление массива и его элементов


Если вы хотите удалить массив целиком, воспользуйтесь функцией unset().

Если вы хотите удалить пару ключ/значение, вы также можете использовать функцию unset(). Приведем конкретные примеры:

<?php

$arr = array(5 => 1, 12 => 2);



$arr[] = 56; // В этом месте скрипта это

// эквивалентно $arr[13] = 56;



$arr["x"] = 42; // Это добавляет к массиву новый

// элемент с ключом "x"



unset($arr[5]); // Это удаляет элемент из массива



unset($arr); // Это удаляет массив полностью

?>




Создание списка – диапазона чисел


range(int $low, int $high)

Эта функция очень простая. Она создает список, заполненный целыми числами от $low до $high включительно.




Переменные и массивы


compact(mixed $vn1 [, mixed $vn2, …])

Функция compact() упаковывает в массив переменные из текущего контекста (глобального или контекста функции), заданные своими именами в $vn1, $vn2 и т. д. При этом в массиве образуются пары с ключами, равными содержимому $vnN, и значениями соответствующих переменных. Вот пример использования этой функции:

$a="Test string";

$b="Some text";

$A=compact("a","b");

// теперь $A===array("a"=>"Test string", "b"=>"Some text")

Почему же тогда параметры функции обозначены как mixed? Дело в том, что они могут быть не только строками, но и списками строк. В этом случае функция последовательно перебирает все элементы этого списка, и упаковывает те переменные из текущего контекста, имена которых она встретила. Более того — эти списки могут, в свою очередь, также содержать списки строк, и т. д. Правда, последнее используется сравнительно редко, но все же вот пример:

$a="Test";

$b="Text";

$c="CCC";

$d="DDD";

$Lst=array("b",array("c","d"));

$A=compact("a",$Lst);

// теперь $A===array("a"=>"Test", "b"=>"Text", "c"=>"CCC", "d"=>"DDD")

extract(array $Arr [, int $type] [, string $prefix])

Функция extract() производит действия, прямо противоположные compact(). А именно, она получает в параметрах массив $Arr и превращает каждую его пару ключ=>значение в переменную текущего контекста.




Получение части массива


Для получения части массива можно использовать функцию array_slice()

array_slice(array $Arr, int $offset [, int $len])

Эта функция возвращает часть ассоциативного массива, начиная с пары ключ=>значения со смещением (номером) $offset от начала и длиной $len (если последний параметр не задан - до конца массива).

Параметры $offset и $len задаются по точно таким же правилам, как и аналогичные параметры в функции substr(). А именно, они могут быть отрицательными (в этом случае отсчет осуществляется от конца массива), и т. д. Вот несколько примеров:

$input = array ("a", "b", "c", "d", "e");

$output = array_slice ($input, 2); // "c", "d", "e"

$output = array_slice ($input, 2, -1); // "c", "d"

$output = array_slice ($input, -2, 1); // "d"

$output = array_slice ($input, 0, 3); // "a", "b", "c"

59.Вставка и удаление элементов массивов

Мы уже знаем несколько операторов, которые отвечают за вставку и удаление элементов. Например, оператор [] (пустые квадратные скобки) добавляет элемент в конец массива, присваивая ему числовой ключ, а оператор Unset() вместе с извлечением по ключу удаляет нужный элемент. Язык PHP поддерживает и многие другие функции, которые иногда бывает удобно использовать.

array_push(alist &$Arr, mixed $var1 [, mixed $var2, …])

Эта функция добавляет к списку $Arr элементы $var1, $var2 и т. д. Она присваивает им числовые индексы — точно так же, как это происходит для стандарных []. Если вам нужно добавить всего один элемент, наверное, проще и будет воспользоваться этим оператором:

array_push($Arr,1000); // вызываем функцию…

$Arr[]=100; // то же самое, но короче

Обратите внимание, что функция array_push() воспринимает массив, как стек, и добавляет элементы всегда в его конец. Она возвращает новое число элементов в массиве.

array_pop(list &$Arr)

Функция array_pop(), является противоположностью array_push(), снимает элемент с "вершины" стека (то есть берет последний элемент списка) и возвращает его, удалив после этого его из $Arr. С помощью этой функции мы можем строить конструкции, напоминающие стек. Если список $Arr был пуст, функция возвращает пустую строку.

array_unshift(list &$Arr, mixed $var1 [, mixed $var2, …])

Функция array_unshift очень похожа на array_push(), но добавляет перечисленные элементы не в конец, а в начало массива. При этом порядок следования $var1, $var2 и т. д. остается тем же, т. е. элементы как бы "вдвигаются" в список слева. Новым элементам списка, как обычно, назначаются числовые индексы, начиная с 0; при этом все ключи старых элементов массива, которые также были числовыми, изменяются (чаще всего они увеличиваются на число вставляемых значений). Функция возвращает новый размер массива. Вот пример ее применения:

$A=array(10,"a"=>20,30);

array_unshift($A,"!","?");

// теперь $A===array(0=>"!", 1=>"?", 2=>10, a=>20, 3=>30)

mixed array_shift(list &$Arr)

Функция mixed array_shift извлекает первый элемент массива $Arr и возвращает его. Она сильно напоминает array_pop(), но только получает начальный, а не конечный элемент, а также производит довольно сильную "встряску" всего массива: ведь при извлечении первого элемента приходится корректировать все числовые индексы у всех оставшихся элементов…

array_unique(array $Arr)

Функция array_unique() возвращает массив, составленный из всех уникальных значений массива $Arr вместе с их ключами. В результирующий массив помещаются первые встретившиеся пары ключ=>значение:

$input=array("a" => "green", "red", "b" => "green", "blue", "red");

$result=array_unique($input);

// теперь $result===array("a"=>"green", "red", "blue");

array_splice(array &$Arr, int $offset [, int $len] [, int $Repl])

Функция array_splice, также как и array_slice(), возвращает подмассив $Arr, начиная с индекса $offset максимальной длины $len, но, вместе с тем, она делает и другое полезное действие. А именно, она заменяет только что указанные элементы на то, что находится в массиве $Repl (или просто удаляет, если $Repl не указан). Параметры $offset и $len задаются так же, как и в функции substr() — а именно, они могут быть и отрицательными, в этом случае отсчет начинается от конца массива. Вот некоторые примеры:

<?php

$input=array("red", "green", "blue", "yellow");

array_splice($input,2);

// Теперь $input===array("red", "green")

array_splice($input,1,-1);

// Теперь $input===array("red", "yellow")

array_splice($input, -1, 1, array("black", "maroon"));

// Теперь $input===array("red", "green", "blue", "black", "maroon")

array_splice($input, 1, count($input), "orange");

// Теперь $input===array("red", "orange")

?>

Последний пример показывает, что в качестве параметра $Repl мы можем указать и обычное, строковое значение, а не массив из одного элемента.




Слияние массивов


Слияние (конкатенация) массивов - это операция создания массива, состоящего из элементов нескольких других массивов. Слияние массивов - это очень опасная операция, поскольку результат слияния подчиняется своей логике, забыв о которой можно потерять данные. Слияние массивов реализуется при помощи оператора "+" или с помощью функции array_merge(). Слияние списков может осуществляться только с помощью функции array_merge().

Предположим, мы имеем два массива:

$A = array("1"=>"первый", "2"=>"Второй");

$B = array("1"=>"первый", "2"=>"Второй");

Теперь сольем данные два массива в один массив $C:

$C = $A + $B;

Оператор "+" для массивов не коммутативен. Это означает, что $A + $B не равно $B + $A.

В результате рассмотренного примера мы получим массив $C следующего вида:

"1"=>"Первый", "2"=>"Второй", "3"=>"Третий", "4"=>"Четвертый"

А в результате $B + $A мы получим такой массив:

"3"=>"Третий", "4"=>"Четвертый", "1"=>"Первый", "2"=>"Второй"

При слиянии списков такой метод не работает. Поясним данный факт на примере:

Предположим, у нас есть два массива:

$A = array(10,11,12);

$B = array(13,14,15);

В результате слияния списков $A и $B ( $A + $B ) мы получим: 10,11,12. А это совсем не тот результат, который мы хотели получить... Связано это с тем, что при слиянии списков с одинаковыми индексами в результирующем массиве остается элемент первого массива, причем на том же месте. В таком случае нам необходимо использовать функцию array_merge()




Операции с ключами и значениями массива


array_flip(array $arr)

Функция array_flip() "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив $arr не изменяется, а результирующий массив просто возвращается.

Конечно, если в массиве присутствовали несколько элементов с одинаковыми значениями, учитываться будет только последний из них:

$A=array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");

$A=array_flip($A);

// теперь $A===array("aaa"=>"b", "ccc"=>"c");

array_keys(array $arr [,mixed $SearchVal])

Функция array_keys() возвращает список, содержащий все ключи массива $arr. Если задан необязательный параметр $SearchVal, то она вернет только те ключи, которым соответствуют значения $SearchVal.

Фактически, эта функция с заданным вторым параметром является обратной по отношению к оператору [] — извлечению значения по его ключу.

array_values(array $arr)

Функция array_values() возвращает список всех значений в ассоциативном массиве $arr. Очевидно, такое действие бесполезно для списков, но иногда оправдано для хэшей.

in_array(mixed $val, array $arr)

Функция in_array() возвращает true, если элемент со значением $val присутствует в массиве $arr.

Впрочем, если вам часто приходится проделывать эту операцию, подумайте: не лучше ли будет воспользоваться ассоциативным массивом и хранить данные в его ключах, а не в значениях? На этом вы можете сильно выиграть в быстродействии.

array_count_values(list $List)

Функция array_count_values() подсчитывает, сколько раз каждое значение встречается в списке $List, и возвращает ассоциативный массив с ключами — элементами списка и значениями — количеством повторов этих элементов. Иными словами, функция array_count_values() подсчитывает частоту появления значений в списке $List. Пример:

$List=array(1, "hello", 1, "world", "hello");

array_count_values($array);

// возвращает array(1=>2, "hello"=>2, "world"=>1)




Сортировка массивов


Начнем с самого простого — сортировки массивов. В PHP для этого существует очень много функций. С их помощью можно сортировать ассоциативные массивы и списки в порядке возрастания или убывания, а также в том порядке, в каком вам необходимо — посредством пользовательской функции сортировки.

Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его значения шли в алфавитном (если это строки) или в возрастающем (для чисел) порядке.

Функция ksort() практически идентична функции asort(), с тем различием, что сортировка осуществляется не по значениями, а по ключам (в порядке возрастания).




Функции для работы с массивами


Функция list()

Предположим, у нас есть массив, состоящий из трех элементов:

$names[0]="Александр";

$names[1]="Николай";

$names[2]="Яков";

Допустим, в какой-то момент нам нужно передать значения всех трех элементов массива, соответственно трем переменным: $alex, $nick, $yakov. Это можно сделать так:

$alex = $names[0];

$nick = $names[1];

$yakov = $names[2];

Если массив большой, то такой способ присвоения элементов массива переменным не очень удобен.

Есть более рациональный подход - использование функции list():

list ($alex, $nick, $yakov) = $names;

Если нам нужны только "Николай" и "Яков", то мы можем сделать так:

list (, $nick, $yakov) = $names;

Функция Array() используется специально для создания массивов. При этом она позволяет создавать пустые массивы. Вот методы использования функции Array():




Ассоциативные массивы в PHP


В PHP индексом массива может быть не только число, но и строка. Причем на такую строку не накладываются никакие ограничения: она может содержать пробелы, длина такой строки может быть любой.

Ассоциативные массивы особенно удобны в ситуациях, когда элементы массива удобнее связывать со словами, а не с числами.

Итак, массивы, индексами которых являются строки, называются ассоциативными массивами.

Одномерные ассоциативные массивы:

Одномерные ассоциативные массивы содержат только один ключ (элемент), соответствующий конкретному индексу ассоциативного массива. Приведем пример:

<?php

// Ассоциативный массив

$names["Иванов"]="Иван";

$names["Сидоров"]="Николай";

$names["Петров"]="Петр";

// В данном примере: фамилии - ключи ассоциативного массива

// , а имена - элементы массива names

?>


Простые многомерные массивы


Обобщенный синтаксис элементов многомерного простого массива:

$имя[индекс1][индекс2]..[индексN];

Пример простого многомерного массива:

<?php

// Многомерный простой массив:

$arr[0][0]="Овощи";

$arr[0][1]="Фрукты";

$arr[1][0]="Абрикос";

$arr[1][1]="Апельсин";

$arr[1][2]="Банан";

$arr[2][0]="Огурец";

$arr[2][1]="Помидор";

$arr[2][2]="Тыква";



// Выводим элементы массива:

echo "<h3>".$arr[0][0].":</h3>";

for ($q=0; $q<=2; $q++) {

echo $arr[2][$q]."<br>";

}

echo "<h3>".$arr[0][1].":</h3>";

for ($w=0; $w<=2; $w++) {

echo $arr[1][$w]."<br>";

}

?>


Простые массивы и списки в PHP


При обращении к элементам простых индексируемых массивов используется целочисленный индекс, определяющий позицию заданного элемента.

Простые одномерные массивы:

Обобщенный синтаксис элементов простого одномерного массива:

$имя[индекс];

Массивы, индексами которых являются числа, начинающиеся с нуля - это списки:

<?php

// Простой способ инициализации массива

$names[0]="Апельсин";

$names[1]="Банан";

$names[2]="Груша";

$names[3]="Помидор";

// Здесь: names - имя массива, а 0, 1, 2, 3 - индексы массива

?>


Массивы (Array)


Массивы (arrays) - это упорядоченные наборы данных, представляющие собой список однотипных элементов.

Существует два типа массивов, различающиеся по способу идентификации элементов.

1. В массивах первого типа элемент определяется индексом в последовательности. Такие массивы называются простыми массивами.

2. Массивы второго типа имеют ассоциативную природу, и для обращения к элементам используются ключи, логически связанные со значениями. Такие массивы называют ассоциативными массивами.

Важной особенностью PHP является то, что PHP, в отличие от других языков, позволяет создавать массивы любой сложности непосредственно в теле программы (скрипта).

Массивы могут быть как одномерными, так и многомерными.


Преобразование строк в числа.


Если строка распознается как числовое значение, результирующее значение и тип определяется так как показано далее.

Строка будет распознана как float, если она содержит любой из символов '.', 'e', или 'E'. Иначе она будет определена как целое.

Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение - это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами.

<?php

$foo = 1 + "10.5"; // $foo это float (11.5)

$foo = 1 + "-1.3e3"; // $foo это float (-1299)

$foo = 1 + "bob-1.3e3"; // $foo это integer (1)

$foo = 1 + "bob3"; // $foo это integer (1)

$foo = 1 + "10 Small Pigs"; // $foo это integer (11)

$foo = 4 + "10.2 Little Piggies"; // $foo это float (14.2)

$foo = "10.0 pigs " + 1; // $foo это float (11)

$foo = "10.0 pigs " + 1.0; // $foo это float (11)

?>

Более подробную информацию об этом преобразовании смотрите в разделе о strtod(3) документации Unix.

Если вы хотите протестировать любой из примеров этого раздела, вы можете скопировать и вставить его и следующую строку, чтобы увидеть, что происходит:

<?php

echo "$foo==$foo; тип: " . gettype ($foo) . "<br />
";

?>

Не ожидайте получить код символа, преобразовав его в целое (как вы могли бы сделать, например, в Си). Для преобразования символов в их коды и обратно используйте функции ord() и chr().


Преобразование в ресурс


Поскольку тип ресурс содержит специальные указатели на открытые файлы, соединения с базой данных, область изображения и тому подобное, вы не можете преобразовать какое-либо значение в ресурс.




Преобразование в объект


Если объект преобразуется в объект, он не изменяется. Если же в объект преобразуется значение любого иного типа, создается новый экземпляр встроенного класса stdClass. Если значение было пустым, новый экземпляр также будет пустым. При любом другом значении оно будет содержатся в переменной-члене scalar:

<?php

$obj = (object) 'ciao';

echo $obj->scalar; // выведет 'ciao'

?>


Преобразование в массив


Для любого из типов: integer, float, string, boolean и resource, если вы преобразуете значение в массив, вы получите массив с одним элементом (с индексом 0), являющимся скалярным значением, с которого вы начали.

Если вы преобразуете в массив объект (object), вы получите в качестве элементов массива свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов.

Если вы преобразуете в массив значение NULL, вы получите пустой массив.


Преобразование в строку


Вы можете преобразовать значение в строку, используя приведение (string), либо функцию strval(). В выражениях, где необходима строка, преобразование происходит автоматически. Это происходит, когда вы используете функции echo() или print(), либо когда вы сравниваете значение переменной со строкой. Ознакомление с разделами "Типы данных" и "Манипуляции с типами" позволяет вам лучше понимать суть. Смотрите также settype().

Булево (boolean) значение TRUE преобразуется в строку "1", а значение FALSE представляется как "" (пустая строка). Этим способом вы можете преобразовывать значения в обе стороны - из булева типа в строковый и наоборот.

Целое (integer) или число с плавающей точкой (float) преобразуется в строку, представленную числом, состоящим из его цифр (включая показатель степени для чисел с плавающей точкой).

Массивы всегда преобразуются в строку "Array", так что вы не можете отобразить содержимое массива (array), используя echo() или print(), чтобы узнать, что он содержит. Чтобы просмотреть один элемент, вам нужно сделать что-то вроде echo $arr['foo']. Смотрите ниже советы о том, как отобразить/просмотреть все содержимое.

Объекты всегда преобразуются в строку "Object". Если вы хотите вывести значение переменной-члена объекта (object) с целью отладки, прочтите следующие абзацы. Если вы хотите получить имя класса требуемого объекта, используйте get_class().

Ресурсы всегда преобразуются в строки со структурой "Resource id #1", где 1 - это уникальный номер ресурса (resource), присвоенный ему PHP во время выполнения. Если вы хотите получить тип ресурса, используйте get_resource_type().

NULL всегда преобразуется в пустую строку.

Вывод массивов, объектов или ресурсов не предоставляет вам никакой полезной информации о самих значениях. Более подходящий способ вывода значений для отладки - использовать функции print_r() и var_dump().

Вы также можете преобразовать значения PHP в строки для постоянного хранения. Этот метод называется сериализацией и может быть выполнен при помощи функции serialize(). Кроме того, если в вашей установке PHP есть поддержка WDDX, вы можете сериализовать значения PHP в структуры XML.


Преобразование в число с плавающей точкой


О том, когда и как строки преобразуются в числа с плавающей точкой смотрите здесь. Для значений других типов преобразование будет таким же, как если бы значение сначала было преобразовано в целое, а затем в число с плавающей точкой. Дополнительную информацию смотрите в разделе Преобразование в целое.




Преобразование в тип Integer (целые числа)


Для несомненного преобразования значения в целое используйте приведение типа (int) или (integer). Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует целый аргумент. Вы также можете преобразовать значение в целое при помощи функции intval().

Преобразование из типа Boolean

FALSE преобразуется в 0 (ноль), а TRUE - в 1 (единицу).

Преобразование из типа Float

При преобразовании из числа с плавающей точкой в целое, число будет округлено в сторону нуля.

Если число с плавающей точкой превышает пределы целого (как правило, это +/- 2.15e+9 = 2^31), результат будет неопределенным, так как целое не имеет достаточной точности, чтобы вернуть верный результат. В этом случае не будет выведено ни предупреждения, ни даже замечания

Внимание! Никогда не приводите неизвестную дробь к целому, так как это может иногда дать неожиданные результаты, например:

<?php

echo (int) ( (0.1+0.7) * 10 ); // выводит 7!

?>

Смотрите более подробно о данной проблеме: предупреждение о точности чисел с плавающей точкой.

Преобразование из типа String

Смотрите Преобразование строк в числа

Преобразования из других типов

Для других типов поведение преобразования в целое не определено. В настоящее время поведение такое же, как если бы значение сперва было преобразовано в булев тип. Однако не полагайтесь на это поведение, так как он может измениться без предупреждения.


Преобразование в тип Boolean (двоичные данные)


Для несомненного преобразования значения в булев тип используйте приведение типа (bool) или (boolean). Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует булев аргумент.

При преобразовании в логический тип, следующие значения рассматриваются как FALSE:

• Сам булев FALSE

• целое 0 (ноль)

• число с плавающей точкой 0.0 (ноль)

• пустая строка и строка "0"

• массив с нулевыми элементами

• объект с нулевыми переменными-членами

• специальный тип NULL (включая неустановленные переменные)

Все остальные значения рассматриваются как TRUE (включая любой ресурс).

Внимание: -1 считается TRUE, как и любое ненулевое (отрицательное или положительное) число!

Примеры преобразований:

<?php

var_dump((bool) ""); // bool(false)

var_dump((bool) 1); // bool(true)

var_dump((bool) -2); // bool(true)

var_dump((bool) "foo"); // bool(true)

var_dump((bool) 2.3e5); // bool(true)

var_dump((bool) array(12)); // bool(true)

var_dump((bool) array()); // bool(false)

var_dump((bool) "false"); // bool(true)

?>


Приведение типов


Приведение типов в PHP работает так же, как и в C: имя требуемого типа записывается в круглых скобках перед приводимой переменной. Пример:

<?php

$foo = 10; // $foo это целое число

$bar = (boolean) $foo; // $bar это булев тип

?>

Допускаются следующие приведения типов:

• (int), (integer) - приведение к целому числу

• (bool), (boolean) - приведение к булеву типу

• (float), (double), (real) - приведение к числу с плавающей точкой (float)

• (string) - приведение к строке

• (array) - приведение к массиву

• (object) - приведение к объекту




Псевдотип Mixed (смешанный) и Callback (обратный вызов)


mixed

mixed говорит о том, что параметр может принимать много (но необязательно все) типов.

Например, функция gettype() принимает все типы PHP, тогда как str_replace() принимает только типы string и array.

callback

Некоторые функции, такие как call_user_func() или usort() принимают в качестве параметра определенные пользователем callback-функции. Callback-функции могут быть не только простыми функциями, но также методами объектов, включая статические методы классов.

PHP-функция передается просто как строка ее имени. Вы можете передать любую встроенную или определенную пользователем функцию за исключением array(), echo(), empty(), eval(), exit(), isset(), list(), print() и unset().

Метод созданного объекта передается как массив, содержащий объект в элементе с индексом 0 и имя метода в элементе с индексом 1.

Методы статических классов также могут быть переданы без создания экземпляра объекта передачей имени класса вместо имени объекта в элементе с индексом 0.




Специальный тип Null (пустой тип)


Специальное значение NULL говорит о том, что эта переменная не имеет значения. NULL - это единственно возможное значение типа NULL.

Замечание: Пустой тип был введен в PHP 4

Переменная считается NULL если

• ей была присвоена константа NULL.

• ей еще не было присвоено какое-либо значение.

• она была удалена с помощью unset().

Существует только одно значение типа NULL - регистро-независимое ключевое слово NULL.

<?php

$var = NULL;

?>




Специальный тип Resource (ресурсы)


Ресурс является специальным типом данных к которому невозможно применить стандартные процедуры обработки. Ресурс как правило содержит служебную информацию, такую как ссылка на внешний источник (например ссылка на соединение с базами данных) или служебную информацию, необходимую для соединения с базой данных. Для создания переменной типа ресурс применяются специальные функции.

Для использования ресурсов применяются специализированные функции, такие как mysql_connect() и т.д.




Преобразование в объект


Преобразование в объект

Если object преобразуется в object, он не изменяется. Если значение другого типа преобразуется в object, создается новый экземпляр встроенного класса stdClass. Если значение было NULL, новый экземпляр будет пустым. Массивы преобразуются в object с именами полей, названными согласно ключам массива и соответствующими им значениям. При преобразовании любого другого значения, оно будет помещено в поле с именем scalar.

<?php

$obj = (object) 'ciao';

echo $obj->scalar; // выведет 'ciao'

?>




Инициализация объектов


Иногда возникает необходимость выполнить инициализацию объекта - присвоить его свойствам первоначальные значения. Предположим, имя класса Coor и он содержит два свойства:имя человека и город его проживания. Можно написать метод (функцию), который будет выполнять инициализацию объекта, например Init():



// Создаем новый класс Coor:

class Coor {

// данные (свойства):

var $name;

var $city;

// Инициализирующий метод:

function Init($name) {

$this->name = $name;

$this->city = "London";

}

}




Преобразование в строковый тип


Значение может быть преобразовано в строку, с помощью приведения (string), либо функции strval(). В выражениях, где необходима строка, преобразование происходит автоматически. Это происходит, когда вы используете функции echo() или print(), либо когда значение переменной сравнивается со строкой. Прочтение разделов руководства Типы и Манипуляции с типами сделает следующее более понятным. Смотрите также settype().

Значение boolean TRUE преобразуется в строку "1", а значение FALSE преобразуется в "" (пустую строку). Это позволяет преобразовывать значения в обе стороны - из булева типа в строковый и наоборот.

Целое (integer) или число с плавающей точкой (float) преобразуется в строку, представленную числом, состоящим из его цифр (включая показатель степени для чисел с плавающей точкой). Числа с плавающей точкой могут быть преобразованы с помощью экспоненциального представления (4.1E+6).

Замечание:

Символ десятичной точки определяется из настроек локали текущего скрипта (категория LC_NUMERIC). Смотрите также setlocale(). Массивы всегда преобразуются в строку "Array", так что вы не можете отобразить содержимое массива (array), используя echo() или print(), чтобы узнать, что он содержит. Чтобы просмотреть отдельный элемент, используйте что-нибудь вроде echo $arr['foo']. Смотрите ниже советы о том, как отобразить/просмотреть все содержимое.

Объекты в PHP 4 всегда преобразовывались в строку "Object". Если вы хотите вывести значения полей объекта (object) с целью отладки, читайте дальше. Если вы хотите получить имя класса требуемого объекта, используйте get_class(). Начиная с PHP 5, также стал доступен метод __toString.

Ресурсы всегда преобразуются в строки со структурой "Resource id #1", где 1 - это уникальный номер ресурса (resource), присвоенный ему PHP во время выполнения. Не полагайтесь на эту структуру, она может измениться в любое время. Если вы хотите получить тип ресурса, используйте get_resource_type().

NULL всегда преобразуется в пустую строку.

35.Доступ к классам и объектам в PHP

класс - это своеобразный тип данных.

Мы рассмотрели, каким образом описываются классы и создаются объекты. Теперь нам необходимо получить доступ к членам класса, для этого в PHP предназначен оператор ->.

Приведем пример:

<?php

// Создаем новый класс Coor:

class Coor {

// данные (свойства):

var $name;

// методы:

function Getname() {

echo "<h3>John</h3>";

}

}



// Создаем объект класса Coor:

$object = new Coor;

// Получаем доступ к членам класса:

$object->name = "Alex";

echo $object->name;

// Выводит 'Alex'

// А теперь получим доступ к методу класса (фактически, к функции внутри класса):

$object->Getname();

// Выводит 'John' заглавными буквами

?>

Чтобы получить доступ к членам класса внутри класса, необходимо использовать указатель $this, которы всегда относится к текущему объекту. Модифицированный метод Getname():function Getname() {

echo $this->name;

}

Таким же образом, можно написать метод Setname():function Setname($name) {

$this->name = $name;

}

Теперь для изменения имени можно использовать метод Setname():

$object->Setname("Peter");

$object->Getname();




Хэш-функции


hash — Генерирует хеш-код (дайджест сообщения)

Описание

string hash ( string $algo , string $data [, bool $raw_output = false ] )

Список параметров

algo - Имя выбранного алгоритма хеширования (например, "md5", "sha256", "haval160,4" и т.д.)

data - Сообщение для хеширования.

raw_output - Когда установлено в TRUE, выводит необработанные двоичные данные. При FALSE, выводит данные в шестнацатеричной кодировке в нижнем регистре.



Возвращаемые значения

Возвращает строку содержащую вычисленный хеш-код в шестнацатеричной кодировке в нижнем регистре. Если raw_output задан как TRUE, то возвращается хеш-код в виде бинарных данных.




Функции преобразования кодировок


iconv — Преобразование строки в требуемую кодировку

Описание

string iconv ( string $in_charset , string $out_charset , string $str )

Преобразует набор символов строки str из кодировки in_charset в out_charset.

Список параметров

in_charset - Кодировка входной строки.

out_charset - Требуемая на выходе кодировка.

str - Строка, которую необходимо преобразовать.



Возвращаемые значения

Возвращает преобразованную строку или FALSE в случае возникновения ошибки.




Установка локальных настроек


setlocale

Установка региональных настроек.

Синтаксис:

string SetLocale(string category, string locale);

Функция setlocale устанавливает текущую локаль, с которой будут работать функции преобразования регистра символов, вывода даты-времени и т.д. Вообще говоря, для каждой категории функций локаль определяется отдельно и выглядит по-разному. То, какую именно категорию функций затронет вызов setlocale(), задается в параметре category. Он может принимать следующие строковые значения:

• LC_CTYPE - активизирует указанную локаль для функций перевода в верхний/нижний регистры;

• LC_NUMERIC - активизирует локаль для функций форматирования дробных чисел - а именно, задает разделитель целой и дробной части в числах;

• LC_TIME - задает формат вывода даты и времени по умолчанию;

• LC_ALL - устанавливает все вышеперечисленные режимы.

Теперь поговорим о параметре locale. Как известно, каждая локаль, установленная в системе, имеет свое уникальное имя, по которому к ней можно обратиться. Именно оно и фиксируется в этом параметре. Однако, есть два важных исключения из этого правила. Во-первых, если величина locale равна пустой строке "", то устанавливается та локаль, которая указана в глобальной переменной окружения с именем, совпадающем с именем категории category (или LANG - она практически всегда присутствует в Unix). Во-вторых, если в этом параметре передается 0, то новая локаль не устанавливается, а просто возвращается имя текущей локали для указанного режима.

view source

print?

1 setlocale("LC_CTYPE","ru_SU.KOI*-R");

2 // Здесь вызов устанавливает таблицу замены

3 // регистра букв в соответствии с кодировкой KOI8-R.




Функции преобразования символов


nl2br

Заменяет символы перевода строки.

Синтаксис:

string nl2br(string string)

Заменяет в строке все символы новой строки
на <br>
и возвращает результат. Исходная строка не изменяется. Обратите внимание на то, что символы , которые присутствуют в конце строки текстовых файлов Windows, этой функцией никак не учитываются, а потому остаются на старом месте.

strip_tags

Удаляет из строки теги.

Синтаксис:

string strip_tags(string str [, string allowable_tags])

Эта функция удаляет из строки все HTML- и PHP-теги и возвращает результат.

Незавершенные или фиктивные теги вызывают ошибку.

В параметре allowable_tags можно передать теги, которые не следует удалять из строки. Они должны перечисляться вплотную друг к другу.

1 $st="

2 <b>Жирный текст</b>

3 <tt>Моноширный текст</tt>

4 <a href=http://spravkaweb.ru>Ссылка</a>";

5 echo "Исходный текст: $st";

6 echo "<hr>После удаления тегов: ".striptags($st,"<a><b>").

7 "<hr>";

Запустив этот пример, мы сможем заметить, что теги <a> и <b> не были удалены (ровно как и их парные закрывающие), в то время как <tt> исчез.

get_meta_tags

Функция ищет и обрабатывает все теги <META>.

Синтаксис:

array get_meta_tags(string filename, int use_include_path)

Функция открывает файл и ищет в нем все теги <META> до тех пор, пока не встретится закрывающий тег </head>.

Если очередной тег <META> имеет вид:

<meta name="название" content="содержимое">

то пара название=>содержимое добавляется в результирующий массив, который под конец и возвращается.

Спецсимволы в значении атрибута filename заменяются на знак подчеркивания "_", а алфавитные символы преобразуются в нижний регистр.

Функция удобно использовать для быстрого получения всех метатегов из указанного файла.

Если необязательный параметр use_include_path установлен, то поиск файла осуществляется не только в текущем каталоге, но и во всех тех, которые назначены для поиска инструкциями include и require.

get_html_translation_table

Функция возвращает таблицу трансляции, которая используется функциями htmlspecialchars() и htmlentities().

Синтаксис:

string get_html_translation_table(int table [, int quote_style])

В этой функции аргумент table указывает, какую таблицу трансляции необходимо получить: HTML_SPECIALCHARS для функции htmlspecialchars() или HTML_ENTITIES для функции htmlentities(). Описание необязательного параметра quote_style приведено в функции htmlspecialchars().

1 $trans = get_html_translation_table(HTML_ENTITIES);

2 $str = "<A & B>";

3 $encoded = strtr($str, $strans);

4 // $encoded = "&lt; A & B >"

Иногда удобно использовать функцию array_flip() для изменения направления транслитерации.

1 $trans = array_flip($trans);

2 $original = strtr($encoded, $trans);

htmlspecialchars

Производит преобразование спецсимволов в HTML-представление.

Синтаксис:

string HtmlSpecialChars(string str [, int quote_style]);

Основное назначение этой функции - гарантировать, что в выводимой строке ни один участок не будет воспринят как тэг.

Заменяет в строке некоторые символы (такие как амперсанд, кавычки и знаки "больше" и "меньше") на их HTML-эквиваленты,так, чтобы они выглядели на странице "самими собой". Самое типичное применение этой функции - формирование параметра value в различных элементах формы, чтобы не было никаких проблем с кавычками, или же вывод сообщения в гостевой книге, если вставлять теги пользователю запрещено.

При помощи необязательного атрибута quote_style можно указать, что делать с кавычками:

• ENT_COMPAT (по умолчанию) - разрешить трансляцию только двойных кавычек

• ENT_QUOTES - разрешить трансляцию любых кавычек

• ENT_NOQUOTES - запретить трансляцию любых кавычек

1 $str = htmlspecialchars("<a href=index.php>Главная</a>", ENT_QUOTES);

htmlentities

Производит конвертацию символов, имеющих HTML-представление.

Синтаксис:

string htmlentities(string str [, int quote_style]);

Эта функция похожа на htmlspecialchars(), но только в ней производится не выборочная трансляция, а полная - для всех символов, которые могут иметь эквивалентные HTML-представления.

При помощи необязательного атрибута quote_style можно указать, что делать с кавычками:

• ENT_COMPAT (по умолчанию) - разрешить трансляцию только двойных кавычек

• ENT_QUOTES - разрешить трансляцию любых кавычек

• ENT_NOQUOTES - запретить трансляцию любых кавычек

hebrev

Конвертация логического текста Hebrew в отображаемый.

Синтаксис:

string hebrev(string hebrew_text [, int max_chars_per_line]);

Необязательный аргумент max_chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слова.

hebrevc

Аналог функции hebrev() с расстановкой переносов.

Синтаксис:

string hebrevc(string hebrew_text [, int max_chars_per_line]);

Функция hebrevc() сходна с hebrev() с тем отличием, что она преобразует символы перевода строк "n" в "<br>n".

Необязательный аргумент max_chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слов.

quoted_printable_decode

Преобразование цитированной строки в 8-битную.

Синтаксис:

string quoted_printable_decode(string str);




Функции для работы с отдельными символами





Функции для работы с блоками текста


string wordwrap(string str [, int width [, string break [, int cut]]])

Функция wordwrap() разбивает исходный текст на строки с определенными завершающими символами. Согласно синтаксису, эта функция разбивает блок текста str на несколько строк, которые завершаеются символами break, так, чтобы в одной строке было не более width букв. Поскольку разбиение происходит по границам слов, текст остается вполне читаемым.

string str_replace(string from, string to, string str)

Функция str_replace() заменяет в исходной строке str одни подстроки на другие. Т.е. функция заменяет в строке str все вхождения подстроки from на to и возвращает результат. Эта функция может работать с двоичными строками.

string substr_replace(string str, string replacement, int start [, int length])

Эта функция заменяет в исходной строке одни подстроки на другие. Она возвращает строку str, в которой часть от символа с позицией start и длиной length заменяется строкой replacement. Если аргумент длины length не указан, замена проводится до конца.

string strtr(string str, string from, string to)



string strtr(string str, array from)

Эта функция предназначена для комплексной замены в строке и имеет два вида синтаксиса. В первом случае функция strtr() возвращает строку str, в которой каждый символ, присутствующий в строке from, заменяется на символ из строки to. Если строки from и to различной длины, то лишние конечные символы у той строки, которая длинее, игнорируются. Во втором случае функция strtr() возвращает строку, в которой фрагменты строки str заменяются на фрагменты, соответствующие индексам значений элементов массива from.

string stripslashes(string str)



Функция удаления обратных слешей. Т.е. производится замена в строке str предваренных слешем символов на их кодовые эквиваленты. Функция работает с символами: ", ", .

string stripcslashes(string str)



А эта функция преобразует спецсимволы в их двоичное представление.

string addslashes(string str)



Функция добавления слешей перед символами строки "," и . Эту функцию удобно использовать при вызове функции eval().

string addcslashes(string str, string charlist)



Функция добавление слешей перед специальными символами строки.

string quotemeta(string str)



Функция цитирования метасимволов. Возвращает строку, в которую добавлены обратные слеши перед каждым из следующих символов: . \ + * ? [ ^ ] ( $ ). Функцию можно использовать для подготовки шаблонов в регулярных выражениях.




Базовые строковые функции


int strlen ( string $s );

Возвращает длину строки $s.



int strpos ( string $s , string $sample , [ int $startPos=0 ] );

Возвращает позицию первого вхождения строки $sample в строку $s начиная с позиции $startPos. Если $startPos не задана, то ищет вхождение с начала строки $s. Если строка $sample не найдена, возвращает false.



string substr ( string $s , int $startPos [ , int $length ] );

Возвращает подстроку строки $s начиная с позиции $startPos. Эта позиция отсчитывается относительно начала строки, если $startPos неотрицательна, и от конца строки в противном случае.

Необязательный параметр $length определяет количество символов в подстроке. Если он положителен, указанное количество отсчитывается относительно $startPos, если отрицателен - от конца строки $s. Если он не задан, то возвращается подстрока от позиции $startPos и до конца строки $s.



string str_replace ( string $srcSample , string $dstSample , string $s );

Возвращает строку, в которой все вхождения $srcSample строки $s заменены на $dstSample.




Строковые операторы


В PHP есть два оператора для работы со строками (string). Первый - оператор конкатенации ('.'), который возвращает строку, представляющую собой соединение левого и правого аргумента. Второй - оператор присваивания с конкатенацией ('.='), который присоединяет правый аргумент к левому.




Обработка строк



Описать строковый тип (привести пример использования двоичных данных)


Строка – это набор символов. В PHP символ это то же самое, что и байт, это значит, что возможно ровно 256 различных символов. Это также означает, что PHP не имеет встроенной поддержки Unicode'а. Некоторую поддержку Unicode'а обеспечивают функции utf8_encode() и utf8_decode().




Преобразование вещественного типа





Описать тип «число с плавающей точкой» (привести пример использования двоичных данных)


Числа с плавающей точкой (они же числа двойной точности или действительные числа) могут быть определены при помощи любого из следующих синтаксисов:

<?php

$a = 1.234;

$b = 1.2e3;

$c = 7E-10;

?>

Формально:

LNUM [0-9]+

DNUM ([0-9]*[.]{LNUM}) | ({LNUM}[.][0-9]*)

EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Размер целого зависит от платформы, хотя максимум, как правило, ~1.8e308 с точностью около 14 десятичных цифр (это 64-битный IEEE-формат).




Преобразование типа Integer


Для несомненного преобразования значения в целое используйте приведение типа (int) или (integer). Однако в большинстве случаев вам нет необходимости использовать приведение типа, поскольку значение будет автоматически преобразовано, если оператор, функция или управляющая конструкция требует целый аргумент. Вы также можете преобразовать значение в целое при помощи функции intval().




Описать тип «целые числа» (привести пример использования двоичных данных)


Целое это число из множества Z = {..., -2, -1, 0, 1, 2, ...}.

Синтаксис

Целые могут быть указаны в десятичной, шестнадцатеричной или восьмеричной системе счисления, по желанию с предшествующим знаком (- или +).

Если вы используете восьмеричную систему счисления, вы должны предварить число 0 (нулем), для использования шестнадцатеричной системы нужно поставить перед числом 0x.

Пример 11-1. Целые

<?php

$a = 1234; // десятичное число

$a = -123; // отрицательное число

$a = 0123; // восьмеричное число (эквивалентно 83 в десятичной системе)

$a = 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)

?>



Формально возможная структура целых такова:

десятичные : [1-9][0-9]*

| 0



шестнадцатеричные : 0[xX][0-9a-fA-F]+



восьмеричные : 0[0-7]+



целые : [+-]?десятичные

| [+-]?шестнадцатеричные

| [+-]?восьмеричные

Размер целого зависит от платформы, хотя, как правило, максимальное значение около двух миллиардов (это 32-битное знаковое). PHP не поддерживает беззнаковые целые.




Работа с бинарными данными


Собственно, таких функций две – pack() и unpack().

pack() - осуществляет пакетирование данных в двоичную строку

Синтаксис:

string pack(string format [ ,mixed $args, ...])



unpack() - Распаковывает данные из двоичной строки согласно формату. Функция возвращает массив, содержащий распакованные элементы.




Преобразование в двоичные данные



Описать двоичные данные (привести пример использования двоичных данных)



Описать объекты языка РНР


Объект представляет собой переменную, экземпляр которой создается по специальному шаблону, называемому классом. Концепции объектов и классов являются неотъемлемой частью парадигмы объектно-ориентированного программирования(ООП).

В отличие от других типов данных, поддерживаемых в языке РНР, объекты должны объявляться явно. Необходимо понимать, что объект — всего лишь конкретный экземпляр класса, используемого в качестве шаблона для создания объектов с конкретными характеристиками и функциональными возможностями. Следовательно, объявление класса должно предшествовать объявлению объектов, создаваемых на их основе.




Перечислить псевдо типы


• mixed говорит о том, что параметр может принимать множество (но не обязательно все) типов.

• number говорит о том, что параметр может быть либо integer, либо float.

• callback - некоторые функции, такие как call_user_func() или usort() принимают в качестве параметра определенные пользователем callback-функции. Callback-функции могут быть не только простыми функциями, но также методами объектов, включая статические методы классов.




Перечислить смешанные и специальные типы данных


Два смешанных типа:

• array - это упорядоченное отображение, которое устанавливает соответствие между значением и ключем.

• object

Два специальных типа:

• resource - это специальная переменная, содержащая ссылку на внешний ресурс.

• NULL - специальное значение NULL говорит о том, что эта переменная не имеет значения. NULL - это единственно возможное значение типа NULL.




Перечислить скалярные типы данных


Четыре скалярных типа:

• boolean – это простейший тип. Он выражает истинность значения - это может быть либо TRUE, либо FALSE.

• integer – целое это число из множества Z = {..., -2, -1, 0, 1, 2, ...}.

• float (число с плавающей точкой или 'double') - Числа с плавающей точкой (они же числа двойной точности или действительные числа) могут быть определены при помощи любого из следующих синтаксисов:

<?php

$a = 1.234;

$b = 1.2e3;

$c = 7E-10;

?>

• string – это набор символов. В PHP символ это то же самое, что и байт, это значит, что возможно ровно 256 различных символов. Это также означает, что PHP не имеет встроенной поддержки Unicode'а. Некоторую поддержку Unicode'а обеспечивают функции utf8_encode() и utf8_decode().




Основные возможности PHP


Вообще возможности PHP позволяют решать достаточно широкий круг задач, но основное направление использование PHP лежит в области написания скриптов для работы на сервере. Можно сказать, что все, что по силам любой CGI программе, по силам и PHP. В частности, PHP в состоянии выполнять обработку данных формы, работать на прием и передачу cookies, генерировать динамические страницы. Но этим возможности PHP не ограничиваются.

Всю сферу применения PHP можно разбить на три основные зоны:

1. Наиболее популярная область применении – создание скриптов, работающих со стороны сервера. Для использования этой возможности Вам будет достаточно иметь парсер PHP (роль которого может играть либо CGI программа, либо серверный модуль), браузер, и вебсервер. Установленный PHP и функционирующий вебсервер понадобятся для того, чтобы получить возможность просмотреть через браузер результаты работы запущенных скриптов.

2. PHP позволяет создавать скрипты, которые будут работать из командной строки. Для запуска такого скрипта отпадает необходимость в браузере и вебсервере. Достаточно иметь парсер PHP. Это направление возможностей, предоставляемых PHP, активно используется для создания скриптов, которые должны выполняться регулярно на платформах Linux или Windows. Нередко подобные скрипты применяются для решения задач по обработке текстов

3. При участии PHP создаются GUI-приложения, которые запускаются на клиентской стороне. Вероятно, PHP не самый подходящий вариант решения таких задач, но, тем не менее, если Вы достаточно мастерски владеете приемами работы с PHP, то вполне можно воспользоваться им для работы со своими клиент-приложениями. В частности, Вы можете использовать PHP-GTK для создания кросс-платформенных приложений. Учтите, что PHP-GTK, являясь расширением PHP, не входит в основную комплектацию дистрибутива PHP.

Несомненным для администраторов преимуществом PHP является его универсальность, позволяющая работать практически во всех существующих на данный момент операционных системах: Linux, Unix’о подобных, Mac OS X, RISC OS, Windows и других. Кроме того, PHP поддерживает подавляющее большинство актуальных на данный момент вебсерверов: Apache, Netscape, iPlanet, Oreilly Webcite Pro, Xitami, Personal Web Server, Microsoft Internet Information Server и прочие. Для серверов, поддерживающих CGI-стандарт, PHP может выступать в роли CGI-процессора, для остальных – в роли модуля.

Исходя из вышесказанного, напрашивается очевидный вывод: PHP предоставляет Вам полную свободу в плане выбора предпочитаемой для работы операционной системы и вебсервера. Но и этим преимущества PHP не исчерпываются. Вы сами решаете, с каким типом программирования будете иметь дело: процедурным, ООП (объектно-ориентированным) или, может быть, вы предпочтете комбинирование обоих видов.

Использование PHP позволит Вам создать на стороне Вашего сервера кеш динамического содержания. Это реализуемо за счет генерации файлов в автоматическом режиме с их последующим сохранением в файловой системе Вашего сервера. Средствами PHP можно формировать не только HTML, но и изображения, PDF-файлы, Flash-ролики, текстовые XML-файлы.

Одним из популярнейших направлений использования PHP является создание скриптов, работающих с некоторыми заданными базами данных (БД). Такая популярность в этом направлении объясняется достаточно просто: PHP поддерживает широчайший круг БД.

PHP позволяет работать в плотно взаимодействии с самыми разнообразными сервисами, используя для этого протоколы IMAP, LDAP, SNMP, POP3, COM и другие. Кроме того, в качестве объектов PHP могут выступать Java-объекты.




Операторы языка Java Script


Условные операторы:

условие ? выражение1 : выражение2

Здесь условие – логическое выражение (результат true или false). Выражение1 вычисляется в случае истинности выражения условие, иначе вычисляется значение выражения выражение2. Оператор ? возвращает значение (подобно любому другому оператору, например = или *), равное значению вычисленного выражения

if (условие) оператор1else оператор2

Если значение выражения условие равно true, то выполняется оператор1 (это может быть как простой, так и составной оператор), в противном случае выполняется оператор2 (также или простой, или составной оператор). Часть else оператор2 является необязательной.

switch (выражение){case выражение1:операторы1case выражение2:операторы2...default:операторы_по_умолчанию}

Оператор switch работает следующим образом. Сначала вычисляется значение выражения выражение. Далее это значение сравнивается с выражениями при каждом ключевом слове case сверху вниз. Если, например, значение выражение совпало со значением выражение2, то выполняется последовательность операторов операторы2. Выполнение продолжается до тех пор, пока не будет встречен оператор break либо выполнение не дойдет до конца тела оператора switch (закрывающая скобка }). Если перед следующим ключевым словом case отсутствует оператор break, то выполнится последовательность операторов операторы3 и т. д. Ключевое слово default используется для того, чтобы задать последовательность операторов, которые должны выполниться при несовпадении значения выражение со всеми выражениями при всех ключевых словах case.

Циклы:

while (условие) оператор

Здесь условие – логическое выражение (аналогично операторам if и ?), а оператор – простой или составной оператор, выполняемый при каждой итерации цикла.

do оператор while (условие)

Этот оператор цикла аналогичен оператору while с тем лишь отличием, что условие в цикле do-while проверяется после выполнения каждой итерации. Это значит, что оператор выполнится как минимум один раз.

for (выражение1; условие; выражение2) оператор

Значение выражения выражение1 рассчитывается перед первой итерацией цикла. Обычно это инициализация счетчика или другой переменной, нужной в цикле. Операторы в теле цикла (оператор) выполняются до тех пор, пока истинно значение выражения условие. Перед второй и последующей итерациями вычисляется значение выражения выражение2 (обычно это выражение по изменению переменной цикла).

Операторы break и continue:

Оператор break, помимо прерывания выполнения последовательности операторов внутри оператора switch, используется для прерывания итерации циклов.

Если в теле цикла встречается оператор continue, то остальные операторы игнорируются, а выполнение переходит на проверку условия цикла.

Оператор запятая – оператор полезен в тех случаях, когда нужно одновременно вычислить значение нескольких выражений в том месте, где допускается запись только одного.




Преимущества и недостатки скриптовых языков


В чем же состоит привлекательность скриптовых языков?

• Скриптовые языки обладают более сложным инструментарием и поддерживают более прогрессивные техники программирования. Например, возможности сортировки данных в Perl встроены прямо в язык. То, что в язык встроены все основные инструменты программирования, избавляет от необходимости создавать их самостоятельно и означает, что для решения конкретной проблемы нужно писать меньше кода, что увеличивает производительность разработчика.

• Скриптовые языки позволяют быстро выполнять доработку кода без раздражающей потери времени на ожидание окончания компиляции.

• Количество людей, не обладающих подготовкой, которую имеют традиционные компьютерные специалисты, но могущих заняться написанием скриптов, стало на порядок больше. Иначе говоря, программированию на скриптовых языках проще научиться. Чтобы стать средним программистом на C++, необходим больший опыт работы, чем для того, чтобы стать средним программистом на PHP.

Какие можно назвать недостатки скриптовых языков?

• Время исполнения все еще является главной проблемой. Конечно, есть области, где скорость слишком важна, чтобы можно было программировать непосредственно на скриптовом языке. Эта проблема обычно решается тем, что код тщательно выбранной части приложения (скажем, 10-30%) пишется на языке низкого уровня (таком, как C или C++); например, в Python есть развитые механизмы для того, чтобы вставить такой код (как и в большинстве других динамических языков).

• Общей проблемой всех скриптовых языков является отсутствие хорошей интегрированной среды разработки (IDE). Конечно, какие-то интегрированные среды разработки существуют, однако в них недостает мощности, как у Visual Studio.

• Ключевым нетехническим, однако важным недостатком является отсутствие маркетингового бюджета. Многие динамические языки идеально подходят для многих проектов, однако им тяжело конкурировать с такими локомотивами маркетинга, как Sun (Java) и Microsoft (C#), которые продолжают продвигать свои технологии как единственно возможные. В истории есть примеры того, как техническое превосходство подавляется превосходным маркетингом.




Внешняя таблица стилей


Внешняя таблица стилей — это обычный текстовый файл с расширением css.

Файл с таблицей стилей должен содержать только правила и комментарии CSS. Наличие во внешней таблице стилей, например, HTML-разметки может привести к тому, что некоторые ее части или вообще вся таблица будут проигнорированы.

Для подключения внешнего CSS используется тег link.




Каскадная таблица стилей


CSS (англ. Cascading Style Sheets — каскадные таблицы стилей) — формальный язык описания внешнего вида документа, написанного с использованием языка разметки.




Динамический HTML


Dynamic HTML или DHTML — это способ создания интерактивного веб-сайта, использующий сочетание статичного языка разметки HTML, встраиваемого (и выполняемого на стороне клиента) скриптового языка JavaScript, CSS (каскадных таблиц стилей) и DOM (объектной модели документа).




Язык HTML


HTML (от англ. HyperText Markup Language — «язык разметки гипертекста») — стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц создаются при помощи языка HTML (или XHTML). Язык HTML интерпретируется браузерами и отображается в виде документа, в удобной для человека форме.




Протокол HTTP


HTTP (сокр. от англ. HyperText Transfer Prоtocоl — «протокол передачи гипертекста») — протокол прикладного уровня передачи данных (изначально — в виде гипертекстовых документов). Основой HTTP является Технология «клиент-сервер», то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом. HTTP в настоящее время повсеместно используется во Всемирной паутине для получения информации с веб-сайтов.




Адресация в Интернете


Так же как и адрес дома в почтовой службе, адрес каждого компьютера в Интернете должен быть определен однозначно.

Для записи адресов используются два равноценных формата IP (ай-пи) и DNS - адреса.

IP- адреса Интернета (IP-номер)

Уникальный код компьютера в сети Интернет (IP-номер) состоит из четырех чисел со значениями от 0 до 255, разделенных точками (ххх.ххх.ххх.ххх.). Такая схема нумерации позволяет иметь в сети более четырех миллиардов компьютеров.

Когда локальная сеть или отдельный компьютер впервые присоединяется к сети Интернет, специальная организация (провайдер) присваивает им IP-номер, гарантируя его уникальность и правильность подключения.

Начало адреса определяет сеть, в которой расположен адресуемый компьютер, а крайний правый блок - компьютер в этой сети. Интернет знает, где искать указанную сеть, а сеть знает, где находится этот компьютер.

DNS-адреса Интернета

Для удобства компьютерам в Интернете кроме цифровых адресов присваиваются собственные имена. При этом также, как и в случае с IP-адресами, необходима уникальность этого имени.

С этой целью была создана специальная система адресации - доменная система имен (Domain Name System) или сокращенно DNS.

DNS-адрес вместо цифр содержит буквы, разделяемые точками на отдельные информационные блоки (домены).

Первым в DNS-адресе стоит имя реального компьютера с IP-адресом. Далее последовательно идут адреса доменов, в которые входит компьютер, вплоть до домена страны (для них принята двухбуквенная кодировка). Например, duma.ru: duma - имя домена Государственной думы, ru - страна Россия, аналогично mvd.ru. Здесь имеет место ситуация, сходная с присвоением географических названий и организацией почтовых адресов.

Когда используется DNS-адрес, компьютер посылает запрос на DNS-сервер, обладающий соответствующей базой данных, DNS-сервер начинает обработку имени с правого конца влево, постепенно сужая поиск, определяя IP-адрес.

Таким образом, по DNS-имени можно определить эквивалентный IP-адрес.




Многоуровневая сетевая модель


Эта модель описывает правила и процедуры передачи данных в различных сетевых средах при организации сеанса связи. Основными элементами модели являются уровни, прикладные процессы и физические средства соединения. Каждый уровень модели OSI выполняет определенную задачу в процессе передачи данных по сети. Базовая модель является основой для разработки сетевых протоколов. OSI разделяет коммуникационные функции в сети на семь уровней, каждый из которых обслуживает различные части процесса области взаимодействия открытых систем.






Принципы построения ЛВС


При создании локальной сети для конкретной организации необходимо определить, какие функции должна выполнять данная ЛВС и какой круг задач будет решаться в рамках данной технологии, т. е. определить стратегию сети. Работу по определению стратегии и по дальнейшему созданию сети, как правило, выполняет специализируя ванная фирма — системный интегратор. Эта фирма должна предложить клиенту оптимальный с точки зрения соотношения цена/качество набор компонентов сети. При этом предлагаемые сетевые решения и модели должны пройти проверку на реальном оборудовании постоянно действующей сетевой лаборатории.

При определении типа создаваемой ЛВС следует принять решение по выбору следующих ее компонентов:

— программное обеспечение прикладных задач, которые предполагается решать с помощью ЛВС;

— сетевая операционная система (ОС);

— аппаратный комплекс (отдельные ЭВМ), требуемый для функционирования сетевой ОС;

— соответствующее коммуникационное оборудование.




Общие сведенья о ЛВС


Сетью называют группу компьютеров, соединенных между собой при помощи специальной аппаратуры, обеспечивающей обмен данными между любыми компьютерами данной группы. Компьютеры могут соединяться друг с другом непосредственно либо через промежуточные узлы связи.

Компьютер, подключенный к сети называют рабочей станцией. Компьютер, предназначенный для управления сетью и концентрации данных называют сервером.

Сервер (обычно высокопроизводительный компьютер) запускает сетевую операционную систему и управляет потоком данных, передаваемых по сети. Отдельные рабочие станции и периферийные устройства подключаются к серверу.

Рабочая станция представляет собой обычный компьютер, работающий под управлением собственной операционной системы (произвольной), но содержащий плату сетевого интерфейса (сетевой адаптер) и физически соединенный кабелями с сервером. Кроме того, рабочая станция запускает специальную программу, называемую сетевой оболочкой, которая позволяет ей обмениваться данными с сервером, другими рабочими станциями и прочими устройствами в сети. Сетевая оболочка позволяет рабочей станции использовать файлы, хранящиеся на сервере, так же легко, как и находящиеся на ее собственных дисках.

В локальной вычислительной сети (ЛВС или LAN – Local Area Network) компьютеры расположены недалеко друг от друга и соединены высокоскоростными адаптерами (со скоростями передачи данных 1-10 или 100 Мбит/сек).

Преимущества ЛВС:

• возможность совместного использования дорогостоящих периферийных устройств (принтеры, сканеры, коммуникационные устройства);

• возможность организации и улучшения связи между людьми, использование общих данных;

• возможность объединения средств обслуживания обработки данных.




Архитектура ЭВМ, определяющие ее характеристики. Основные


эксплуатационные характеристики ЭВМ.

Архитектура ЭВМ – многоуровневая иерархия аппаратно-программных ср-в, из

кот. строится ЭВМ. Каждый из ур-ней допускает многовариантное постр-е и

прим-е. Конкретно реал-я ур-ей опр-ет особ-ти стр-ого постр-я ЭВМ.

концептуальная структура вычислительной машины[1], определяющая проведение

обработки информации и включающая методы информации в данные и принципы

взаимодействия технических средств и программного обеспечения

Группа хар-к ЭВМ, опред-щих ее стр-ру:

*технич. и экспл. хар-ки ЭВМ (быстродействие и произ-ть, показатели надеж-

ти, достов-ти, точности, емкости опер. и внеш. памяти, габар. размеры, особ-

ти экспл-ции и т.д.);

*хар-ки и состав функ. модулей базовой конф-ции ЭВМ. Возм-сть расшир-я

состава технич и программных ср-в; возм-ть измен-я стр-ры;

*состав ПО ЭВМ и сервисных услуг (ОС, пакеты прикл программных ср-ва автом-

ции ПРГния). Важнейшими харак-ми ЭВМ явл-ся быстод-е и произв-ть.

*Быстрод-е хар-ся числом опр-ого типа команд, выпол-ых ЭВМ за 1 сек.;

*Произ-ть объем работ (напр., число станд. программных), выпол-ых ЭВМ за

ед. времени.

*Емкость запомин. устр-в изм-ся кол-во струк-ых ед-ц инф-ции, кот. одновр-но

м. разместить в память. Наим стр-рной ед-цей инф-ции явл. бит – одна

двоичная цифра.

*Надежность - спос-ть ЭВМ при опред-ых усл-ях выполнять треб. ф-ции в теч

зад-ого времени (стандарт ISO); *Точность – возм-ть различать почти равные

знач-я. Точ-ть получения рез-тов обраб-ки в осн. опр-ся разряд-тью ЭВМ.

*Достоверность – это св-во инф-ии быть правильно воспринятой. Дост-ть хар-ся

вероят-ью получ-я безош-ых рез-тов. Задан. уровень дост-сти обеспеч-ся

аппаратно- ПРГыми ср-ами контроля самой ЭВМ.

shpora.net