Procesul de calcul al timpului rămas. Programare (calculatoare). Director Tehnic al Centrului de Tehnologii și Soluții Inovatoare „Jet Infosystems”


Tot ceea ce a fost descris în câteva secțiuni anterioare a fost mai mult concentrat pe efectuarea de cercetări ulterioare asupra problemei timpului intrinsec al procesului și într-o măsură mult mai mică asupra aplicațiilor practice. Pentru a umple acest gol, să schițăm una dintre modalitățile de a calcula timpul adecvat al unui proces pe baza datelor statistice privind evoluția acestuia.

Luați în considerare un proces unidimensional, a cărui stare este caracterizată de o variabilă reală x. Să presupunem că observațiile dinamicii procesului sunt efectuate în timpul astronomic t, astfel încât t = tk și x = xk, k = 1, ..., n sunt timpi de observație fix și valorile corespunzătoare ale stărilor proces. Există multe metode matematice diferite care permit să construim curbe care fie trec prin puncte (t k, Xk), fie le abordează în „cel mai bun mod”. Funcțiile rezultate x = x (t) dau naștere, în mintea noastră, la impresia că procesul luat în considerare depinde de mișcarea mecanică a corpurilor cerești și, prin urmare, starea acestuia se exprimă prin timpul astronomic t. O astfel de concluzie ar putea fi luată în considerare; dacă nu ar exista dificultăţi constante în încercarea de a prezice cursul ulterior al procesului. Pentru un număr mare de procese diverse care nu sunt direct legate de mișcările mecanice ale corpurilor cerești, predicțiile teoretice obținute folosind funcția x = x (t) în afara intervalului de observație încep să se abate semnificativ de la datele experimentale ulterioare. Motivul discrepanței dintre teorie și experiment este de obicei încercat să fie explicat printr-o metodă de procesare aleasă fără succes, dar esența problemei poate să nu fie în aceasta.

Orice proces care ne interesează are loc în Univers. El, desigur, „simte” impactul mișcării corpurilor cerești. Cu toate acestea, acest impact poate fi „non-rigid”, non-determinist. Acest lucru, în special, se poate manifesta prin faptul că, la anumite intervale ale curgerii timpului astronomic, starea procesului rămâne neschimbată. Să ne amintim în acest sens exemplul dat mai devreme cu o cameră goală închisă izolată de lumea exterioară. Să lăsăm doar un singur viu să zboare în cameră. În câteva zile, schimbările în starea sistemului de muscă de casă vor depinde de mișcarea muștei, deoarece nu se pot aștepta schimbări în starea casei. În același timp, este greu de imaginat că comportamentul muștei este legat în mod rigid de cursul timpului astronomic.

După ce am făcut o digresiune atât de lungă, să trecem la descrierea algoritmului pentru calcularea timpului potrivit al procesului.

În acest algoritm, unitatea de calcul a maximelor locale este aleasă ca măsură naturală a timpului. În plus, sunt luate în considerare posibilele secțiuni ale stării staționare a procesului, în care, după cum sa menționat mai devreme, propriul timp se opreste. Deoarece putem vorbi despre identitatea celor două stări numai în limitele preciziei de măsurare, atunci un număr pozitiv e este folosit în viitor - eroarea de măsurare admisă.

Deci, datele de intrare pentru algoritm sunt un număr natural n, un număr pozitiv 8, matrice (tk) și (xk), k = 1, ..., n. Pentru comoditatea programării, algoritmul este prezentat în forma a patru module executate secvenţial.

Modulul 1, folosind datele n, e, tk), (xk), în cazul general formează noi tablouri 7 = (7+ X = (X t) și un tablou însoțitor foarte specific P = (?), unde 1 = 1, . .., t și t<Сп. Основное назначение этого модуля -- выявление в массиве x k) последовательностей идентичных состояний процесса, сохранение первых элементов в таких последовательностях и удаление всех остальных и, наконец, уменьшение по определенному, правилу исходного интервала наблюдения от t до на сумму тех промежутков времени, в которых процесс протекает стационарно.

Modulul 1 include următoarele proceduri:

p: = 1, m: = 0, k: = 1.

În p.p. 1, 2, se introduc contoare cu valori inițiale specifice:

În p.p. 3, 4, valorile contorului cresc cu 1.

Verificați starea k ^ n. Dacă este satisfăcut, treceți la punctul 6, în caz contrar, treceți la punctul 11.

Verificați inegalitatea x k --x k = e. Dacă este valabilă, atunci mergeți la articolul 7, în caz contrar, treceți la articolul 9.

7.tii = ti - (tkl - tk), i = k1, ..., p.

Această procedură înseamnă că, dacă valorile lui Xk și Xk 1 nu se pot distinge în cadrul erorii, atunci de fiecare dată, începând de la tk, scade cu suma tki-tk.

p = p. Reveniți la punctul 4.

Tv = t k; X v: = x k; p = p v = v + l., adică. se formează elementele tablourilor T, X, P și se atribuie următoarea valoare v.

  • 10. Luați (t k, ..., t n AND (Xk, - X n) ca șiruri inițiale de dimensiune n - k 1 + 1 și apoi reveniți la elementul 2.
  • 11. Tipăriți m, (T), (X,) și (P,), unde i = l, ..., m. Sfârșit.

Să explicăm semnificația elementelor tabloului însoțitor P. Din textul anterior rezultă că valoarea lui pk este egală cu numărul acelor elemente ale tabloului (xk) care urmează imediat și diferă de x pi + . .. +, +, cu mai puțin de e. Rețineți, de asemenea, că pi + ... + pm = n.

Exemplul 1. Dat: n = 20, (/ *) = (2, 4, 7, 10, 12, 13, 15, 17, 20, 22, 24, 25,

  • 27, 30, 32, 33, 34, 35, 36) și (x,) = (4, 4, 6, 6, 6, 3, 2, 4, 3, 3, 3, 2, 2, 4, 5 , 5,
  • 5, 4, 3), vezi fig. 9, a.

Ca rezultat al modulului 1, obținem m = 11,

(G) = (2, 3, 4, 6, 8, 11, 1-2, 15, 17, 18, 19); (X,) = (4, 6, 3, 2, 4, 3, 2, 4,5,4,3)

și (d.) = (2, 4, 1, 1, 1.3, 2, 1.3, 1, 1), vezi fig. 9, b.

Modulul 2. Datele de intrare pentru acesta sunt un număr natural m, precum și matrice (7+ (XL), = 1, ..., t. Acest modul din matrice (TJ dezvăluie momentele de timp [TM a], 1 = 1 m (ml

Exemplul 2. Valorile m, (T b) și (X,] sunt împrumutate din exemplul anterior. După executarea modulului 2, obținem ml = 3, m2 = 8, (U,) = (3, 8, 17), (T *) = (3, 4, 6, 8, 11, 12, 15, 17), vezi și Fig. 9, b.

Modulul 3. Date de intrare ml, m2, (TM n), 1 = 1, ..., ml, (T *), / 2 = 1, ..., rn2.

Acest modul este conceput pentru a construi o matrice (m (-g) după formula

Unde TV 6 [TMp, TMn + i]

Variabila m este timpul propriu generat de modificarea variabilei x. Măsura sa naturală este unitatea maximă locală.

Exemplul 3. Datele inițiale pentru Т 2) sunt aceleași cu valorile ml, m2 ITM și în exemplul 2.. După calculele corespunzătoare, obținem N = (0; 0,2; 0,6; 1; 1,33; 1,78; 2).

Modulul 4. Formează rezultatul rezultatelor stabilind o corespondență între valorile lui m și elementele lui x din tabloul (xk).

Exemplul 4. Pe baza datelor din exemplele 2 și 3, se produce următorul rezultat, vezi fig. 9, în:

t: 0; 0,2; 0,6; 1; 1,33; 1,44;

x: 6; 3; 2; 4; 3T 0 2;

Astfel, algoritmul considerat face posibilă dezvoltarea conceptului de timp propriu al procesului pe baza informațiilor privind modificarea stării procesului înregistrate pe scara de timp astronomică. Este destul de clar că puteți utiliza alți algoritmi bazați, de exemplu, pe calcularea unei secvențe de minime locale sau a unei secvențe mixte constând din maxime și minime locale. În procesarea datelor experimentale, probabil că ar trebui să încercați diferite opțiuni. Dacă, dintr-un motiv oarecare, experimentatorul a optat pentru unul dintre timpii corespunzători specifici și a primit matricele (m4 și (xk) în același timp, atunci în etapa următoare ar trebui să folosească câteva metode matematice pentru a aproxima punctele experimentale (m * , x) o linie universală aproximativă a procesului x = x (t) Prin extrapolarea acestei linii dincolo de intervalul inițial de observație, el poate face predicții despre cursul ulterioar al procesului.

Este interesant de menționat un experiment de calcul conceput pentru a evalua perspectivele de utilizare a algoritmului propus. Datele privind scurgerile anuale ale râului au fost alese ca material experimental. Vakhsh (Tadjikistan) timp de 40 de ani anteriori. Pentru aceeași perioadă de timp, au fost preluate informații despre dinamica numărului Wolf - cel mai frecvent utilizat indice integral al activității solare. Acesta din urmă a stat la baza dezvoltării timpului propriu al procesului de activitate solară. Până în noua perioadă, informațiile despre costurile râului au fost transformate. Vakhsh și apoi, în timpul perioadei de observație, dependența teoretică a debitului de apă a fost dată în funcție de timpul adecvat al activității solare. O trăsătură caracteristică a programului rezultat este comportamentul aproape periodic al costurilor maxime și minime. Costurile, însă, nu rămân constante.

Versiunea de comutare a algoritmului anterior este algoritmul care a rămas cel mai puțin timp. În conformitate cu acest algoritm, planificatorul alege procesul cu cel mai mic timp de execuție rămas de fiecare dată. În acest caz, este necesar să se cunoască în prealabil timpul de execuție a sarcinilor. Când sosește o nouă sarcină, timpul total de execuție al acesteia este comparat cu timpul de execuție rămas al sarcinii curente. Dacă timpul de execuție al noii sarcini este mai scurt, procesul curent este suspendat și controlul este transferat noii sarcini. Această schemă vă permite să serviți rapid cereri scurte.

Planificare pe trei niveluri

Sistemele batch vă permit să implementați planificarea pe trei niveluri, așa cum se arată în figură. Pe măsură ce noi sarcini intră în sistem, acestea sunt mai întâi plasate într-o coadă stocată pe disc. Admisie planificator de acces selectează jobul și îl transferă în sistem. Restul sarcinilor rămân în coadă.

De îndată ce o sarcină a intrat în sistem, va fi creat un proces corespunzător pentru aceasta și poate intra imediat într-o luptă pentru accesul la procesor. Cu toate acestea, este posibilă o situație în care există prea multe procese și toate nu se potrivesc în memorie, atunci unele dintre ele vor fi paginate pe disc. Al doilea nivel de programare determină ce procese pot fi stocate în memorie și care pot fi stocate pe disc. Acest lucru este făcut programator de memorie .

Programatorul de memorie se uită periodic la procesele de pe disc pentru a decide pe care să se mute în memorie. Printre criteriile folosite de planificator se numără următoarele:

1. Cât timp a trecut de când procesul a fost șters pe disc sau încărcat de pe disc?

2. Cât timp folosește procesorul?

3. Care este dimensiunea procesului (procesele mici nu interferează)?

4. Cât de important este procesul?

Al treilea nivel de programare este responsabil pentru accesarea procesorului pentru procesele care sunt într-o stare gata. Când se vorbește despre un „planificator”, de obicei este programator procesor ... Acest planificator folosește orice algoritm adecvat situației, cu sau fără întrerupere. Am luat deja în considerare câțiva dintre acești algoritmi și ne vom familiariza cu alții.

Planificare în sisteme interactive.

Planificare ciclică.

Unul dintre cei mai vechi, simpli, corecti și mai des utilizați algoritmi este algoritmul de programare round-robin. Fiecărui proces îi este dat un anumit interval de timp al procesorului, așa-numitul interval de timp. Dacă procesul încă rulează la sfârșitul intervalului de timp, acesta este anulat și controlul este transferat către alt proces. Desigur, dacă procesul se blochează sau iese mai devreme, tranziția de control are loc în acel moment. Implementarea programării round-robin este simplă. Planificatorul trebuie doar să păstreze lista de procese pregătită. Când un proces și-a atins limita de timp, este trimis la sfârșitul listei.

Singurul punct interesant al acestui algoritm este lungimea cuantică. Trecerea de la un proces la altul durează ceva timp - trebuie să salvați și să încărcați registre și carduri de memorie, să actualizați tabele și liste, să salvați și să reîncărcați memoria cache, etc. eficiență, dar un cuantum prea mare poate duce la un răspuns lent la scurte interactive. întrebări. O valoare cuantică de aproximativ 2 0 -5 0 ms este adesea un compromis rezonabil.

Planificare prioritară.

Într-un algoritm de programare ciclică, există o presupunere importantă că toate procesele sunt egale. Într-o situație de computer cu un număr mare de utilizatori, acesta poate să nu fie cazul. De exemplu, la o universitate, în primul rând, ar trebui deserviți decani, apoi profesori, secretari, curățători și abia apoi studenți. Necesitatea de a lua în considerare astfel de factori externi conduce la o planificare prioritară. Ideea de bază este simplă: fiecărui proces i se atribuie o prioritate, iar controlul este transferat procesului gata de rulare cu cea mai mare prioritate.

Mai multe cozi.

Unul dintre primele planificatoare prioritare a fost implementat în sistemul compatibil time-shared (CTSS).Principala problemă a sistemului CTSS a fost comutarea prea lentă a procesului, deoarece în memoria computerului IBM 7094 exista un singur proces. Fiecare comutare însemna descărcarea procesului curent pe disc

și citirea unui nou proces de pe disc. Dezvoltatorii CTSS și-au dat seama rapid că eficiența ar fi mai bună dacă proceselor, limitate de capacitatea procesorului, li s-ar aloca o porțiune de timp mai mare decât dacă li s-ar da bucăți mici, dar adesea. Pe de o parte, acest lucru va reduce numărul de schimburi de la memorie pe disc, iar pe de altă parte, va duce la o deteriorare a timpului de răspuns, așa cum am văzut deja.

Ca urmare, a fost dezvoltată o soluție cu clase prioritare. Proceselor clasei cu cea mai mare prioritate li s-a alocat un cuantic, proceselor din următoarea clasă - două cuante, următoarea - patru cuante și așa mai departe. Când procesul a consumat tot timpul alocat, s-a mutat la clasa de jos.

Ca exemplu, luați în considerare un proces care trebuie să efectueze calcule peste 100 de cuante. Mai întâi, i se va da un cuantum, apoi va fi pompat pe disc. Data viitoare va primi 2 cuante, apoi 4, 8,16, 32, 64, deși folosește doar 37 din 64. În acest caz, va avea nevoie de doar 7 transferuri (inclusiv încărcarea inițială) în loc de 100, care ar fi necesar folosind un algoritm ciclic. În plus, pe măsură ce vă scufundați în coada de prioritate, procesul va începe din ce în ce mai rar, lăsând procesorul la procese mai scurte.

„Cel mai scurt proces este următorul”

Deoarece algoritmul Shortest Task First minimizează timpul mediu de răspuns în sistemele de procesare în lot, am dori să-l folosim și în sistemele interactive. Într-o anumită măsură, acest lucru este posibil. Procesele interactive urmează cel mai adesea tiparul „așteptării unei comenzi, executarea unei comenzi, așteptarea unei comenzi, executarea unei comenzi...” Considerând executarea fiecărei comenzi ca o sarcină separată, puteți minimiza timpul mediu general de răspuns prin pornind mai întâi sarcina cea mai scurtă. Singura problemă este

în a afla care dintre procesele în curs este cel mai scurt.

Una dintre metode se bazează pe estimarea duratei procesului pe baza comportamentului anterior al procesului. Acest lucru începe procesul cu cel mai scurt timp estimat. Să presupunem că timpul estimat de execuție a comenzii este T 0 și timpul estimat pentru următoarea lansare este T 1. Puteți îmbunătăți estimarea timpului luând suma ponderată a acestor timpi aT 0 + (1 - a) T 1. Alegând valoarea potrivită pentru a, putem face ca algoritmul de estimare să uite rapid de lansările anterioare sau, dimpotrivă, să le amintim mult timp. Luând a = 1/2, obținem o serie de estimări:

T 0, T 0/2 + T 1/2, T 0/4 + T 1/4 + T 2/2, T 0/8 + T 1/8 + T 2/4 + T 3/2.

După trei lansări, ponderea lui T 0 în estimare va scădea la 1/8.

Metoda de estimare a următoarei valori dintr-o serie printr-o medie ponderată a valorii anterioare și a estimării anterioare este adesea denumită îmbătrânire. Această metodă este aplicabilă în multe situații în care este necesară o evaluare a valorilor anterioare. Cel mai simplu mod de a realiza îmbătrânirea este la a = 1/2. La fiecare pas doar ai nevoie

adăugați o nouă valoare estimării curente și înjumătățiți suma (prin deplasarea cu 1 bit la dreapta).

Planificare garantata.

O abordare fundamental diferită a programării este de a face promisiuni reale utilizatorilor și apoi de a le respecta. Iată o promisiune care este ușor de făcut și ușor de îndeplinit: dacă n utilizatori împărtășesc un procesor cu dvs., vi se va oferi 1 / n putere de procesor.

Și pe un sistem cu un utilizator și n procesoare care rulează, fiecare va primi 1 / n cicluri de procesor.

Pentru a îndeplini această promisiune, sistemul trebuie să urmărească alocarea CPU între procese din momentul în care fiecare proces este creat. Sistemul calculează apoi cantitatea de resurse de procesor la care are dreptul procesul, cum ar fi timpul de la creare împărțit la n. Acum puteți calcula raportul dintre timpul acordat procesului și timpul la care are dreptul. Valoarea rezultată de 0,5 înseamnă că procesului i s-a alocat doar jumătate din ceea ce trebuia să fie, iar 2,0 înseamnă că procesul a primit de două ori mai mult decât ar trebui. Apoi se începe procesul cu cel mai mic raport până la

nu va deveni mai mare decât cea a celui mai apropiat vecin.

Planificarea loteriei.

Algoritmul se bazează pe distribuirea tichetelor de loterie către procese pentru acces la diverse resurse, inclusiv la procesor. Când planificatorul trebuie să ia o decizie, un bilet de loterie este selectat la întâmplare, iar deținătorul acestuia are acces la resursă. În ceea ce privește accesul la CPU, „loteria” se poate întâmpla de 50 de ori pe secundă, iar câștigătorul primește 20 ms de timp CPU.

Procesele mai importante pot primi bilete suplimentare pentru a crește probabilitatea de câștig. Dacă doar 100 de bilete și 20 dintre ele sunt într-un singur proces, atunci va primi 20% din timpul procesorului. Spre deosebire de planificatorul prioritar, unde este foarte greu de estimat ce înseamnă, să zicem, prioritatea 40, în planificarea loteriei totul este evident. Fiecare proces va primi un procent de resurse aproximativ egal cu procentul de bilete de care dispune.

Planificarea loteriei are mai multe proprietăți interesante. De exemplu, dacă un proces primește mai multe bilete în timpul creării, atunci la următoarea loterie șansele sale de câștig sunt proporționale cu numărul de bilete.

Procesele care interacționează pot schimba bilete după cum este necesar. Deci, dacă un proces client trimite un mesaj către un proces de server și apoi se blochează, acesta își poate transmite toate biletele procesului server pentru a crește șansa de pornire a serverului. Când procesul serverului iese, acesta poate returna toate biletele înapoi.

Planificare corectă.

Până acum, am presupus că fiecare proces este controlat, indiferent de cine este șeful. Prin urmare, dacă utilizatorul 1 creează 9 procese, iar utilizatorul 2 creează 1 proces, atunci folosind programarea ciclică sau în cazul priorităților egale, utilizatorul 1 va obține 90% din procesor, iar utilizatorul 2 doar 10.

Pentru a evita astfel de situații, unele sisteme acordă atenție proprietarului procesului înainte de programare. În acest model, fiecare utilizator primește o parte din procesor, iar planificatorul alege procesul în conformitate cu acest fapt. Dacă în exemplul nostru, fiecare dintre utilizatori a avut

Se promite 50% din procesor, atunci vor primi 50% din procesor, indiferent de numărul de procese.

Programare în sisteme de timp real.

Timpul joacă un rol esențial în sistemele în timp real. Cel mai adesea, unul sau mai multe dispozitive fizice externe generează semnale de intrare, iar computerul trebuie să răspundă adecvat la acestea într-o anumită perioadă de timp.

Sistemele în timp real sunt împărțite în sisteme dure în timp real , ceea ce înseamnă că există termene limită strânse pentru fiecare sarcină (trebuie respectate) și sisteme flexibile în timp real în care încălcările orarului sunt nedorite, dar acceptabile. În ambele cazuri, programul este împărțit în mai multe procese, fiecare dintre ele previzibile. Aceste procese sunt cel mai adesea scurte și își termină activitatea într-o secundă. Când apare un semnal extern, este la latitudinea planificatorului să se asigure că programul este respectat.

Evenimentele externe la care sistemul trebuie să reacționeze pot fi împărțite în periodic(care apar la intervale regulate) si neperiodică(apărând imprevizibil). Pot exista mai multe fluxuri periodice de evenimente pe care sistemul trebuie să le proceseze. În funcție de timpul petrecut cu procesarea fiecăruia dintre evenimente, este posibil ca sistemul să nu poată procesa toate evenimentele în timp util.


Informații similare.


Adesea, dezvoltatorii, în special cei fără experiență, se pierd atunci când li se cere să stabilească termene limită pentru sarcini. Cu toate acestea, capacitatea de a planifica este o abilitate foarte utilă și necesară, care ajută nu numai în muncă, ci și în viață. Am decis să întrebăm experții cum să învețe cum să planificăm și să livrăm proiectele la timp.

Scurte concluzii pot fi găsite la sfârșitul articolului.

Dezvoltatorul trebuie de obicei să ia în considerare mai mulți parametri simultan pentru a estima timpul de execuție a sarcinii:

  1. Experiență în realizarea unor astfel de sarcini și lucrul cu această stivă de tehnologie. Dacă trebuie să faci ceva fundamental nou, trebuie să fii deosebit de atent cu evaluarea.
  2. Experienta cu acest client. Cunoscând clientul, puteți prezice aproximativ câteva cerințe suplimentare și cantitatea de editări.
  3. Calitatea codului cu care se lucrează. Acesta este cel mai influent factor, din cauza căruia totul poate fi foarte întârziat și, în general, nu merge conform planului. Dacă proiectul are teste, peste tot există doar dependențe explicite și funcționalitatea este bine izolată, totul nu este atât de înfricoșător. Este mult mai rău dacă aveți de-a face cu cod vechi fără teste sau cu cod suprasaturat cu dependențe implicite. Lucruri precum „funcțiile magice” (când este greu să vedeți stiva finală de apeluri din cod) și duplicarea codului (când trebuie să editați mai multe secțiuni independente pentru a schimba orice funcționalitate) pot complica, de asemenea, lucrurile.

Pentru a învăța cum să evaluezi în mod adecvat timpul de lucru, trebuie să exersezi constant. La începutul lucrării mele, am făcut exact așa: am estimat timpul necesar pentru a finaliza orice sarcină primită, chiar dacă nimeni nu mi-a cerut, apoi am urmărit cât de exact am reușit să intru în estimarea mea. În procesul de finalizare a sarcinii, am remarcat care acțiuni necesită mai mult timp. Dacă ceva a mărit mult termenul, și-a amintit de acest moment și a ținut cont de el în evaluările următoare.

La o evaluare obiectivă a timpului necesar exclusiv pentru muncă, ar trebui adăugată o marjă mică pentru a acoperi situațiile de forță majoră. Este adesea estimat ca procent din îndeplinirea sarcinii principale, dar este diferit pentru toată lumea: cineva adaugă 20% din timp, cineva - 10% și cineva - 50%.

De asemenea, este util să se analizeze motivele nerespectării termenelor după fiecare încălcare majoră a termenului. Dacă nu ai suficiente calificări, trebuie să lucrezi la punctele tale slabe. Dacă problema a fost organizatorică - pentru a înțelege ce a împiedicat munca normală.

Promovați Lower

, Director Tehnic al Centrului de Tehnologii și Soluții Inovatoare „Jet Infosystems”

Un număr mare de articole sunt dedicate metodelor de evaluare a complexității unui proiect, inclusiv duratei muncii și sarcinilor individuale. Totuși, până acum, aceasta este cauza conflictelor atât în ​​cadrul echipei de proiect, cât și în comunicarea cu clientul.

Asistentul principal în evaluare este experiența. Încercați să corelați cumva noua sarcină cu cele deja finalizate. Dacă faceți un raport, vedeți cât a durat un raport similar în trecut. Dacă faceți ceva nou, încercați să descompuneți în bucăți cunoscute și să le apreciați. Dacă sarcina este complet nouă, acordați-vă timp pentru a studia (și mai bine - coordonați acest timp cu persoana care stabilește sarcina).

Acordați atenție etapelor însoțitoare - dacă aveți nevoie să dezvoltați un serviciu, atunci testarea unitară (și poate nu doar o unitate) ar trebui inclusă în evaluare, pregătirea datelor de testare va dura o anumită perioadă de timp. Luați în considerare integrarea cu alte servicii și așa mai departe. Acordați-vă timp pentru a remedia erorile pe care le găsiți singur sau cu ajutorul testerilor. Se poate pierde mult timp pe sarcini „invizibile”. De exemplu, există o evaluare pentru dezvoltare și există o evaluare pentru testare, dar transferul unui artefact pentru testare poate fi asociat cu desfășurarea standurilor. Prin urmare, este important să ne imaginăm mental întregul proces pentru a nu pierde nimic.

După determinarea intensității forței de muncă, este necesar să se includă noi locuri de muncă în calendar, fără a uita de alte sarcini și activități care se desfășoară în paralel.

Și nu uitați că planurile sunt inutile, dar planificarea este neprețuită. Învață să ajustezi planurile la timp, să-i păstrezi pe toți interesați și să escaladezi în timp util, astfel încât termenele ratate să nu fie o surpriză pentru nimeni.

Promovați Lower

O întrebare la care nu se poate răspunde într-o formă scurtă. Dacă ar fi ușor, atunci nu ar fi nicio problemă cu ratarea termenelor limită.

Pentru a face termenele de dezvoltare mai previzibile, trebuie mai întâi să înțelegeți motivele pentru care programatorii greșesc în mod constant.

Primul motiv este că majoritatea sarcinilor pe care le face un programator sunt unice într-o măsură sau alta. Adică, cel mai probabil, programatorul va face o astfel de sarcină pentru prima dată. Nu are o idee bună despre cât timp va dura munca. Dacă acesta este un programator cu experiență solidă și a trebuit să îndeplinească o sarcină similară, evaluarea lui va fi mai aproape de realitate.

Pentru a folosi o simplă analogie, dacă nu ai săpat niciodată șanțuri, nu poți spune exact cât timp îți va lua să sapi un șanț de 30 cm lățime, 60 cm adâncime și 20 de metri lungime. Dacă ați săpat înainte, estimarea dumneavoastră a timpului de lucru va fi mult mai apropiată de durata reală a lucrării.

Al doilea motiv este că programatorii sunt optimiști în mod inerent. Adică, luând în considerare sarcina, alegând o opțiune de implementare pentru aceasta, evaluând îmbunătățirile, dezvoltatorul se așteaptă ca totul să funcționeze așa cum se așteaptă. Și nu se gândește la problemele pe care le va întâlni pe drum. Adesea, el nu le poate prevedea. De exemplu, există o sarcină pe care un programator o poate îndeplini folosind o bibliotecă de software open-source terță parte. La etapa de evaluare, l-a găsit pe Internet, a citit descrierea - i se potrivește. Și chiar a estimat corect volumul lucrării sale de construit în utilizarea acestei biblioteci. Dar nu a prevăzut deloc că va apărea o eroare în mediul produsului său software din această bibliotecă.

Dezvoltatorul va trebui nu numai să includă utilizarea bibliotecii în codul său, ci și să repare eroarea din biblioteca în sine. Și adesea, dezvoltatorul nu oferă timp pentru a-și remedia greșelile. După cum arată statisticile, testarea și remedierea erorilor poate dura aproximativ 50% din timpul petrecut pentru codare. Cifra depinde de calificările dezvoltatorului, de mediu, de practicile de dezvoltare utilizate (de exemplu, testele unitare reduc semnificativ acest timp, iar durata totală/intensitatea muncii a sarcinii de dezvoltare se dovedește a fi mai mică).

Dacă revenim la analogia cu excavatorul, atunci excavatorul nu se aștepta să i se rupă lopata și va trebui să petreacă două ore căutând o nouă tăiere.

Al treilea motiv sunt cerințele neprevăzute. Niciunul dintre domeniile de fabricație a materialelor cu care clienții le place să compare dezvoltarea de software nu are un astfel de flux de cerințe noi. Imaginați-vă trecerea unui excavator care a săpat 19 metri din 20 și a auzit de la client dorința ca șanțul să nu meargă în linie dreaptă, ci ca un șarpe cu lungimea umărului de 97 de centimetri.

Cum să faci față tuturor acestor lucruri și cum să trăiești în condiții de o asemenea incertitudine? Reducerea incertitudinii și formarea rezervelor de timp.

Cel mai simplu mod de a-ți aduce așteptările mai aproape de realitate este să folosești o regulă umoristică „Pi”. După ce ați primit o estimare de la dezvoltator (în termeni de timp sau intensitate a muncii), trebuie să o înmulțiți cu numărul Pi (= 3,14159). Cu cât dezvoltatorul a făcut estimarea mai experimentat, cu atât acest coeficient poate fi mai mic.

Este imperativ să se exerseze descompunerea problemei inițiale în probleme mici de cel mult 4 ore. Cu cât descompunerea este mai detaliată, cu atât sunt mai mari șansele ca estimarea să se apropie de aportul/durata efectivă de muncă.
Dacă revenim la alocarea rezervei - acest timp ar trebui să fie alocat la sfârșitul proiectului. Este o practică proastă să faceți o rezervă și să o includeți pentru fiecare sarcină. Legea Parkinson „Munca îi umple tot timpul alocat” se realizează cu rigurozitate.

Dacă rezumați un „total” scurt, atunci pentru a determina corect calendarul lucrării, următoarele acțiuni vor fi utile:

  • efectuați descompunerea muncii, împărțiți sarcina în pași cât mai detaliați posibil;
  • prototipare;
  • limitează implementarea cerințelor neprevăzute anterior. Acest lucru nu înseamnă că nu trebuie făcute, dar este indicat să evidențiezi aceste cerințe și să convingi cu clientul să schimbe timpul și costul implementării lor;
  • luați în considerare timpul de stabilizare a soluției;
  • folosiți practici pentru a îmbunătăți calitatea codului, de exemplu, scrieți teste unitare;
  • constituie o rezervă generală.

Ei bine, și amintiți-vă că, dacă un fapt depășește estimarea dvs. cu 30%, atunci acesta este un rezultat foarte bun.

Promovați Lower

Pentru o evaluare cât mai precisă, aveți nevoie de experiență în dezvoltare reală și într-un anumit domeniu. Dar există reguli generale care vor ajuta la evitarea greșelilor de planificare și a problemelor la predarea lucrării către client. Aș descrie aceste reguli după cum urmează.

În primul rând, trebuie să înțelegeți sarcina. Acest lucru pare a fi evident și nu are legătură directă cu evaluarea timpului, dar de fapt este un punct cheie. Chiar și în proiectele mari serioase, unul dintre principalii factori de eșec și întârziere este problema definirii cerințelor. Pentru dezvoltatorii începători, din păcate, aceasta este o problemă serioasă - nu citesc sarcina tehnică sau nu o citesc și o înțeleg foarte selectiv (au memorat și completat cinci din zece puncte și și-au amintit restul când a fost trimis rezultatul). Este clar că o sarcină neînțeleasă nu poate fi implementată în mod corespunzător la timp.

Următorul - estimați timpul pentru dezvoltare în sine. Particularitatea programării este că nu există sarcini absolut identice. Acest lucru ne face munca mai interesantă, dar momentul este mai dificil. Descompunerea funcționează bine aici, de exemplu. împărțirea unei sarcini unice complexe într-o secvență de subsarcini mici, familiare. Și fiecare dintre ele poate fi deja estimat adecvat în ore. Adunăm estimările subsarcinilor - și obținem estimarea întregii probleme.

De obicei, această estimare include doar costurile directe de codare. Aceasta este, fără îndoială, cea mai importantă parte a dezvoltării, dar departe de a fi singura (și adesea - nu cea mai voluminoasă). Implementarea completă a sarcinii include, de asemenea, citirea și clarificarea specificației tehnice, întâlniri cu colegii sau clientul, depanare și testare, întocmirea documentației, predarea rezultatului (demonstrație către client și posibile modificări pe baza comentariilor acestuia). Cât timp îți va lua pentru aceste acțiuni, doar experiența îți va spune. La început, este important, cel puțin, să nu uitați să le luați în considerare în calcule, iar o estimare aproximativă a timpului poate fi cerută de la colegii mai experimentați.

Deci, luăm o estimare a costurilor cu forța de muncă de codificare, adăugăm o estimare a costului muncii suplimentare - și obținem estimarea dorită a timpului pentru finalizarea sarcinii. Dar asta nu este tot! Este necesar să se indice data planificată de finalizare a sarcinii. Ar fi o greșeală să luați și să împărțiți pur și simplu costurile cu forța de muncă (în ore) la 8 ore și să le adăugați la data curentă. În viața reală, un dezvoltator nu lucrează niciodată (ei bine, aproape niciodată) 100% din timp la o anumită sarcină. Cu siguranță va trebui să petreci timp cu alte lucrări - importante, dar nu legate direct de cea principală. De exemplu, ajutarea colegilor, instruirea, raportarea etc. De obicei, la planificare, se crede că 60-70% din timpul de lucru este alocat direct lucrărilor la proiectul actual. În plus, trebuie să țineți cont de posibilele întârzieri care vă vor împiedica să lucrați continuu la sarcină. De exemplu, dacă pentru aceasta trebuie să interacționați cu alte persoane (colegi, clienți), atunci țineți cont de angajarea acestora, programul de lucru etc.

Iată regulile de bază care, în opinia mea, îl vor ajuta pe dezvoltator să evite problemele în estimarea și respectarea termenelor limită. În plus, cheia este acumularea propriei experiențe atât în ​​implementarea sarcinilor, cât și în evaluare. De exemplu, este foarte util, după finalizarea unei sarcini, să comparați estimarea inițială cu intervalul de timp real și să trageți concluzii pentru viitor. Și, desigur, merită să studiezi experiența altcuiva. Aș recomanda cu privire la subiectul cărții de S. McConnell „Cât costă un proiect software” și S. Arkhipenkov „Prelegeri despre managementul proiectelor software”.

Promovați Lower

La evaluarea și planificarea termenelor limită, este necesar:

  1. Descompuneți sarcina în bucăți funcționale mici, astfel încât să existe o înțelegere clară a cât timp va dura dezvoltarea fiecărei astfel de bucăți.
  2. În paralel cu descompunerea, vor apărea cu siguranță întrebări suplimentare despre funcționalitate care nu au fost descrise în declarația problemei. Este necesar să obțineți răspunsuri la astfel de întrebări, deoarece acestea se referă direct la domeniul de activitate și, în consecință, la momentul respectiv.
  3. Adăugați un procentaj de riscuri la evaluarea finală. Aceasta este determinată empiric. Puteți începe, de exemplu, cu riscuri de 10-15%.
  4. Înțelegeți câte ore pe zi este dispus să aloce un programator pentru o sarcină.
  5. Împărțim estimarea finală la numărul de ore pe care le alocăm pe zi și obținem numărul de zile necesare implementării.
  6. Ne concentrăm pe calendar și pe numărul necesar de zile de finalizat. Luăm în considerare weekendurile și alte zile în care programatorul nu va putea face față sarcinii, precum și data de începere a lucrului (dezvoltatorul nu este întotdeauna pregătit să ducă sarcina la lucru în aceeași zi). Astfel, obținem data de început și de sfârșit a lucrării.

Promovați Lower

În compania noastră, planificarea sarcinilor trece întotdeauna prin mai multe etape. Pe partea de business, formulăm 5-6 obiective strategice pentru anul. Acestea sunt sarcini de nivel înalt, de exemplu, pentru a crește un parametru cu un anumit procent. Mai mult, diferite divizii ale companiei formează sarcini de afaceri pentru toate echipele IT. Termenele limită pentru aceste sarcini primesc o estimare aproximativă inițială, care este adesea formată de toți membrii echipei - manager, analist, dezvoltator și tester. Primind această evaluare, afacerea prioritizează sarcinile, ținând cont de obiectivele strategice ale companiei. Obiectivele strategice transversale ajută în acest sens, cu ele devine evident că toți lucrăm pentru o cauză comună, nu există o astfel de situație când cineva trage doar în direcția lui. Colectăm sprinturi din sarcini estimate cu precizie. Unele echipe le au trimestrial, altele au lunar. Echipele oferă o evaluare precisă a mai multor probleme care, conform estimărilor preliminare, cad în următorul sprint. Sarcinile mari sunt împărțite în altele de nivel inferior, pentru fiecare dintre acestea un anumit executant este responsabil și el este cel care oferă o evaluare precisă.

În această etapă, este important să nu uitați să adăugați timp suplimentar pentru a remedia erorile, deoarece doar cei care nu fac nimic nu se înșală. Acest lucru este bine înțeles atât de Product Owner, cât și de clienții de afaceri. În același timp, marja de timp necesară trebuie să fie adecvată: nimeni nu va înțelege un dezvoltator care stabilește o sarcină simplă un termen prea lung, i se va cere să justifice decizia. Cea mai grea parte este să explici afacerii de ce este nevoie de timp pentru refactorizare. Suntem recunoscători companiei noastre pentru faptul că din când în când reușim, pentru că în cele din urmă refactorizarea duce la o infrastructură mai ușoară și punerea lucrurilor în ordine în cod, ceea ce crește stabilitatea sistemului și poate accelera semnificativ dezvoltarea de noi funcții.

Uneori apar erori de evaluare. În opinia mea, este imposibil ca departamentul de dezvoltare din companiile mari cu infrastructură dezvoltată să evite complet acest lucru. În acest caz, este important ca dezvoltatorul să-și informeze managerul despre ceea ce se întâmplă la timp, iar el, la rândul său, are timp să avertizeze afacerea și să „depășească” ceva în planurile generale ale companiei. Într-un astfel de mod, este mult mai corect să lucrezi decât să încerci frenetic să faci ceea ce durează 5 zile în 3 zile și apoi să te îneci într-un număr mare de greșeli care au apărut din cauza unei astfel de grădini.

Promovați Lower

Răspunsul corect la ambele părți ale întrebării [cum să învățați cum să planificați și să livrați corect un proiect la timp - Ed.] - o experienta. Nu există alte moduri de a „cunoaște Zen”. Conform teoriei luării deciziilor, orice fel de inferențe precise pot fi construite numai pe baza unei analize a unui număr de date deja disponibile. Și cu cât sunt mai multe aceste date, cu atât sunt mai precise prognoza și evaluarea finală.

În cuvintele lui Herbert Shaw: „Experiența este o școală în care o persoană învață ce prost a fost înainte”. Prin urmare, urmează o concluzie destul de simplă: dacă un programator are deja experiență care se corelează cu sarcina în cauză, se poate baza pe ea, dacă nu, pe experiența „colegilor din magazin”.

În continuare, trebuie să înțelegeți că programarea directă este o sarcină pe care oamenii o fac foarte, foarte prost, mai ales în dezvoltare. Este o bună practică atunci când estimați termenele scadente să introduceți „factori de corecție” în estimarea inițială. Această metrică poate fluctua în intervalul de la 1,5 la 3, în funcție de experiența dezvoltatorului și de totalitatea gradelor de incertitudine ale sarcinilor rezolvate în cadrul proiectului.

Promovați Lower

Este important să luați în considerare mulți factori în determinarea timpului.

De exemplu, experiență în muncă. Cât de clar vă imaginați scopul lucrării viitoare? Ați mai făcut așa ceva înainte? Este clar că, cu cât mai multă experiență, cu atât munca se va face mai repede.

O misiune tehnică bine scrisă joacă un rol important în determinarea termenelor limită. Cu asta în zona noastră, lucrurile sunt foarte dificile. Adesea clientul însuși nu știe ce vrea, așa că vă sfătuiesc să petreceți o zi sau două în plus, dar obțineți de la client o idee clară despre rezultatul dorit. Este important ca această prezentare să fie reciprocă. Și abia după aceea poți începe să negociezi suma și termenii.

De asemenea, includeți întotdeauna riscurile. Pentru începători, recomand înmulțirea timpului de livrare estimat cu două. La urma urmei, este mai bine să livrați proiectul înainte de termen și să vă dezvoltați ca specialist în ochii clientului, decât să-l depuneți mai târziu și să vă distrugeți reputația.

Promovați Lower

Recomandare generală - dezvoltatorul trebuie să învețe cum să descompună corect sarcinile, să caute întotdeauna posibile capcane, să se bazeze pe propria experiență și să nu uite să avertizeze clienții și colegii la timp dacă sarcina nu poate fi rezolvată în intervalul de timp specificat.

Construirea unui plan clar este mult mai dificilă decât stabilirea unui termen limită pentru o anumită sarcină. În același timp, este important nu doar să livrați proiectul la timp, ci și să vă asigurați că sistemul pe care l-ați dezvoltat rezolvă corect problemele de afaceri. Aici, echipele IT sunt asistate de diverse metodologii de dezvoltare software: de la RUP și MSF la SCRUM și alte formate Agile. Alegerea instrumentelor este foarte extinsă, iar mulți dintre clienții noștri doresc să înțeleagă în avans cum vom lucra cu ei în proiect, la ce principii aderăm.

Apropo, subiectul Agile devine acum aproape de business, și chiar în proiecte individuale către sectorul public, deoarece principiile acestei metodologii fac posibilă implementarea proiectelor foarte rapid, gestionând așteptările clientului la fiecare iterație. De exemplu, într-o echipă Agile, practic nu există discuții lungi cu un client. Uitați de zeci de pagini care descriu detalii tehnice inutile, cum ar fi viteza cu care apar meniurile derulante. Oferiți clientului posibilitatea de a încerca o versiune intermediară a sistemului, apoi vă va deveni mult mai ușor să vă înțelegeți.

Echipa agilă planifică totul împreună și determină nivelul optim al costurilor cu forța de muncă care va fi necesar pentru a rezolva o anumită problemă. De exemplu, una dintre tehnici se numește „Poker Planning”, în care fiecare participant își dă anonim estimarea volumului de lucru necesar pentru o anumită sarcină. După aceea, echipa determină greutatea medie a sarcinii în puncte de poveste sau ore-om și distribuie sarcinile conform principiului „cui îi place ce”. În același timp, echipa se adună în fiecare zi pentru o întâlnire de 15 minute, când toată lumea discută în câteva minute despre starea sarcinilor lor curente, inclusiv raportarea dificultăților care au apărut. Echipa elimină rapid problema detectată, prin urmare clientul se uită la următoarea etapă a muncii programatorului cât mai repede posibil. Dezvoltatorii nu întârzie termenele limită pentru finalizarea sarcinilor din cauza refuzului de a retrage echipa din nou sau a încercărilor zadarnice de a-și da seama singuri, ucigând timp prețios. Apropo, cu astfel de mini-state, dezvoltatorii au dorința de a-și arăta cea mai bună parte, de a arăta că ești responsabil pentru munca ta. Chiar motivează și se autodisciplinează.

Introducere

Scopul atelierului de organizare a producției este de a extinde și aprofunda cunoștințele teoretice, de a insufla abilitățile necesare pentru a rezolva cele mai frecvente probleme în practică privind organizarea și planificarea producției.

Atelierul include sarcini pentru secțiunile principale ale cursului. La începutul fiecărei teme sunt prezentate scurte instrucțiuni metodologice și informații teoretice, sarcini tipice cu soluții și sarcini pentru rezolvare independentă.

Prezența instrucțiunilor metodologice și a scurtelor informații teoretice în fiecare temă face posibilă utilizarea acestui atelier în cadrul cursurilor prin corespondență.


Calculul duratei ciclului de producție

Durata ciclului de producție servește ca indicator al eficienței procesului de producție.

Ciclul de producție- perioada de sedere a obiectelor de munca in procesul de productie din momentul lansarii materiilor prime pana la momentul eliberarii produsului finit.

Ciclul de producție constă în timpul de lucru, timp în care se cheltuiește forța de muncă și timpi de pauză... Pauzele, în funcție de motivele care le-au cauzat, pot fi împărțite:

1) pe natural sau tehnologice - se datorează naturii produsului;

2) organizatoric(pauze între ture).

Durata ciclului de producție constă din următoarele componente:

Ciclul T = t acelea + t mananca + t tr + t k.k. + t m. o. + t m.ts.

Unde t acestea- timpul operatiilor tehnologice;

mănâncă - timpul proceselor naturale (uscare, răcire etc.);

t tr - timpul de transport al obiectelor de muncă;

t c.c. - timpul de control al calității;

t m.o - ora interoperativă de culcare;

t m.ts. - timpul petrecut în depozitele interdepartamentale;

(t Trei t k.k. poate fi combinat cu t m.o).

Calculul duratei ciclului de producție depinde de tipul de producție. În producția de masă, durata ciclului de producție este determinată de momentul în care produsul este în flux, adică.

Ciclul T = t in m,

Unde t v- ciclu de eliberare;

M- numărul de locuri de muncă.

Sub tact de eliberare trebuie înțeles intervalul de timp dintre lansarea unui produs fabricat și următorul produs.

Ciclul de eliberare este determinat de formulă

t in = Teff / V,

Unde Teff- fondul efectiv de timp al lucrătorului pentru perioada de facturare (schimb, zi, an);

V- volumul producţiei pentru aceeaşi perioadă (în unităţi naturale).

Exemplu: T cm = 8 ore = 480 min; banda T = 30 min; → Teff = 480 - - 30 = 450 min.

B = 225 buc; → t h = 450/225 = 2 min.

În producția de masă, unde prelucrarea se desfășoară în loturi, durata ciclului tehnologic este determinată nu pe unitatea de producție, ci pentru întregul lot. Mai mult, în funcție de metoda de lansare a unui lot în producție, obținem timpi de ciclu diferiți. Există trei moduri de a muta produsele în producție: secvențial, paralel și mixt (serial-paralel).


eu... La consistent piese în mișcare, fiecare operație ulterioară începe numai după ce se încheie cea anterioară. Timpul ciclului pentru mișcarea secvențială a pieselor va fi egal cu:

Unde n - numărul de părți ale lotului care se prelucrează;

t buci- rata de timp pentru operație;

C i- numărul de locuri de muncă per i operațiunea;

m- numărul de operaţii ale procesului tehnologic.

Se oferă un lot de 5 articole. Lotul este trecut secvenţial prin 4 operaţii; durata primei operații - 10 minute, a doua - 20 de minute, a treia - 10 minute, a patra - 30 de minute (Fig. 1).

Poza 1

T ciclu = T ultimul = 5 (10 + 20 + 10 + 30) = 350 min.

Modul secvenţial de mişcare a pieselor are avantajul că permite echipamentului să funcţioneze fără timpi de nefuncţionare. Dar dezavantajul său este că durata ciclului de producție în acest caz este cea mai mare. În plus, la locurile de muncă sunt create stocuri semnificative de piese, ceea ce necesită spațiu suplimentar de producție.

II... La paralel mișcarea lotului, piesele individuale nu sunt întârziate la locurile de muncă, ci sunt transferate individual la următoarea operațiune imediat, fără a aștepta finalizarea procesării întregului lot. Astfel, cu deplasarea paralelă a unui lot de piese la fiecare loc de muncă, se efectuează simultan diverse operații pe diferite părți ale aceluiași lot.

Durata procesării lotului cu mișcarea paralelă a produselor este redusă drastic:

dl .

Unde n n- numarul de piese in transfer lot(transport), i.e. numărul de produse transferate simultan de la o operațiune la alta;

Dl - cel mai lung ciclu de funcționare.

Odată cu lansarea paralelă a unui lot de produse, părți din întregul lot sunt procesate continuu doar la acele locuri de muncă unde operațiunile lungi urmează operațiunilor scurte. În cazurile în care operațiunile scurte urmează operațiunilor lungi, de ex. mai lungă (în exemplul nostru - a treia operație), executarea acestor operații se realizează intermitent, adică. echipament inactiv. Aici, un lot de piese nu poate fi procesat imediat, fără întârzieri, deoarece operația anterioară (lungă) nu permite acest lucru.

În exemplul nostru: n= 5, t 1 = 10; t 2 = 20; t 3 = 10; t 4 = 30; cu= 1.

T abur = 1 (10 + 20 + 10 + 30) + (5-1) 30 = 70 + 120 = 190 min.

Luați în considerare schema de mișcare paralelă a pieselor (Fig. 2):

Poza 2

III... Pentru a elimina întreruperile în procesarea părților individuale ale lotului în toate operațiunile, aplicați paralel-serial sau amestecat o metodă de pornire, în care piesele (după prelucrarea lor) sunt transferate la următoarea operație una câte una, sau sub formă de restanțe „de transport” (mai multe piese deodată) în așa fel încât executarea operațiunilor să fie nu este întreruptă la niciun loc de muncă. În metoda mixtă, continuitatea prelucrării este preluată din metoda secvenţială, iar din metoda paralelă, trecerea piesei de la exploatare la exploatare imediat după prelucrarea acesteia. Cu o metodă mixtă de lansare în producție, timpul ciclului este determinat de formulă

cor .

unde cor. - cel mai scurt ciclu de operare (din fiecare pereche de operatii adiacente);

m-1 numărul de aliniamente.

Dacă operația ulterioară este mai lungă decât cea anterioară, sau este egală cu aceasta în timp, atunci această operație este începută una câte una, imediat după prelucrarea primei părți în operația anterioară. Dacă, dimpotrivă, operația ulterioară este mai scurtă decât cea anterioară, atunci există goluri în transferul bucată cu bucată. Pentru a le preveni, este necesar să se acumuleze o rezervă de transport de un asemenea volum, care este suficientă pentru a asigura munca în operațiunea ulterioară. Pentru a găsi practic acest punct pe grafic, este necesar să transferați ultimul detaliu al lotului și să amânați durata execuției acestuia spre dreapta. Timpul de procesare pentru toate celelalte părți ale lotului este reprezentat în partea stângă a graficului. Începutul prelucrării primei părți arată momentul în care rezerva de transport din operațiunea anterioară ar trebui transferată la această operațiune.

Dacă operațiunile adiacente au aceeași durată, atunci doar una dintre ele este acceptată ca scurtă sau lungă (Fig. 3).

Figura 3

T ultimul abur = 5 (10 + 20 + 10 + 30) - (5-1) (10 + 10 + 10) = 350-120 = 230 min.

Principalele modalități de reducere a duratei ciclului de producție sunt:

1) Reducerea intensității forței de muncă a produselor de fabricație prin îmbunătățirea fabricabilității structurii fabricate, utilizarea calculatoarelor, introducerea unor procese tehnologice avansate.

2) Organizarea rațională a proceselor de muncă, amenajarea și întreținerea locurilor de muncă pe bază de specializare și cooperare, mecanizare extensivă și automatizare a producției.

3) Reducerea diferitelor pauze planificate și neplanificate la locul de muncă pe baza utilizării raționale a principiilor organizării științifice a procesului de producție.

4) Accelerarea cursului reacțiilor ca urmare a creșterii presiunii, temperaturilor, trecerii la un proces continuu etc.

5) Îmbunătățirea proceselor de transport, depozitare și control și suprapunerea acestora în timp cu procesul de prelucrare și asamblare.

Reducerea duratei ciclului de producţie este una dintre sarcinile serioase ale organizării producţiei, deoarece afectează cifra de afaceri a capitalului de lucru, reducerea costurilor cu forța de muncă, reducerea spațiului de depozitare, nevoia de transport etc.

Sarcini

1 Determinați durata ciclului de prelucrare a 50 de părți în tipuri de mișcare secvenţială, paralelă și secvenţial-paralelă în procesul de producţie. Prelucrarea pieselor constă din cinci operații, a căror durată este, respectiv, de min: t 1 =2; t 2 =3; t 3 =4; t 4 =1; t 5 = 3. A doua operație se efectuează pe două mașini, iar fiecare dintre celelalte pe una. Dimensiunea lotului de transfer este de 4 bucăți.

2 Determinați durata ciclului de prelucrare a 50 de părți cu tipuri de mișcare secvenţială, paralelă și secvenţial-paralelă în procesul de producţie. Prelucrarea pieselor constă din patru operații, a căror durată este, respectiv, de min: t 1 =1; t 2 =4; t 3 =2; t 4 = 6. A patra operație se efectuează pe două mașini, iar fiecare dintre celelalte pe una. Dimensiunea lotului de transfer este de 5 bucăți.

3 Un lot de piese de 200 de bucăți este prelucrat cu o mișcare paralelă-secvențială a acestuia în procesul de producție. Prelucrarea pieselor constă în șase operații, a căror durată este, respectiv, de min: t 1 =8; t 2 =3; t 3 =27; t 4 =6; t 5 =4; t 6 = 20. A treia operație este efectuată pe trei mașini, a șasea pe două, iar fiecare dintre celelalte operații este efectuată pe o singură mașină. Determinați cum se va schimba timpul ciclului de procesare pentru un lot de piese dacă varianta paralelă-secvențială a mișcării în producție este înlocuită cu una paralelă. Dimensiunea lotului de transfer este de 20 de bucăți.

4 Un lot de 300 de bucăți este prelucrat cu o mișcare paralelă-secvențială a acestuia în procesul de producție. Prelucrarea pieselor constă în șapte operații, a căror durată este, respectiv, de min: t 1 =4; t 2 =5; t 3 =7; t 4 =3; t 5 =4; t 6 =5; t 7 = 6. Fiecare operație este efectuată pe o singură mașină. Transfer lot - 30 buc. Ca urmare a îmbunătățirii tehnologiei de producție, durata celei de-a treia operațiuni a fost redusă cu 3 minute, a șaptea - cu 2 minute. Determinați cum se modifică ciclul lotului.

5 Se oferă un lot de semifabricate, format din 5 bucăți. Lotul este trecut prin 4 operații: durata primei este de 10 minute, a doua este de 20 de minute, a treia este de 10 minute, iar a patra este de 30 de minute. Determinați durata ciclului folosind metode analitice și grafice pentru mișcarea secvențială.

6 Se oferă un lot de semifabricate, format din patru piese. Lotul este trecut prin 4 operații: durata primei este de 5 minute, a doua este de 10 minute, a treia este de 5 minute, iar a patra este de 15 minute. Determinați timpul ciclului analitic și grafic cu mișcare paralelă.

7 Se oferă un lot de semifabricate, format din 5 bucăți. Lotul este trecut prin 4 operații: durata primei este de 10 minute, a doua este de 20 de minute, a treia este de 10 minute, iar a patra este de 30 de minute. Determinați durata ciclului folosind metode analitice și grafice pentru mișcarea secvenţial-paralelă.

8 Determinați durata ciclului tehnologic de prelucrare a unui lot de 180 de bucăți. cu versiuni paralele și secvențiale ale mișcării sale. Construiți grafice de procesare. Dimensiunea lotului de transfer - 30 buc. Normele de timp și numărul de locuri de muncă în operațiuni sunt următoarele.

(timpul de la serviciu nu devine suport până în primul moment în care începe să se execute pe resurse); minimizând întârzieri sau timp de raspuns(timpul de la lucru devine pornit până la finalizare în cazul activității periodice, sau până când sistemul răspunde cu mâinile primei ieșiri a utilizatorului în cazul activității interactive); sau maximizare justiţie(cantitate egală de timp de procesor pentru fiecare proces sau, mai general, momente corespunzătoare în timp în funcție de prioritatea și volumul de lucru al fiecărui proces). În practică, aceste obiective sunt adesea în contradicție (de exemplu, debit versus latență), astfel încât planificatorul va face un compromis adecvat. Preferința este măsurată prin oricare dintre problemele menționate mai sus, în funcție de nevoile și sarcinile utilizatorului.

OS / 360 și succesori

Aix

În AIX Versiunea 4, există trei semnificații posibile pentru o politică de planificare a firelor de execuție:

  • În primul rând, a ieșit primul: După ce este programat un thread cu această politică, acesta este executat până la finalizare, dacă nu este blocat, renunță voluntar la controlul procesorului sau expedierea devine cu o prioritate mai mare a firului. Numai cu fluxuri cu prioritate fixă ​​pot avea o politică de programare FIFO.
  • Round Robin: Acesta este similar cu planificatorul de schemă AIX Versiunea 3 într-un mod round robin bazat pe intervale de timp de 10 ms. Când un fir PP are control la sfârșitul unui interval de timp, acesta se deplasează la coada cozii de fire cu aceeași prioritate. Numai firele cu prioritate fixă ​​pot avea o politică de programare Round Robin.
  • ALTE: Această politică este definită de POSIX1003.4a în implementare. În AIX Versiunea 4, această politică este definită ca echivalentul RR, cu excepția faptului că se aplică firelor de execuție cu prioritate nefixată. Recalcularea valorii de prioritate a unui fir de execuție pe întrerupere înseamnă că un fir de execuție poate pierde controlul, deoarece valoarea sa de prioritate a crescut mai mult decât un alt fir. Acesta este comportamentul AIX Versiunea 3.

Threadurile sunt de interes în primul rând pentru aplicațiile care constau în prezent din mai multe procese asincrone. Aceste aplicații pot impune o sarcină ușoară sistemului dacă sunt convertite într-o structură cu mai multe fire.