Recommended
PPTX
PPTX
PPTX
PPT
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPT
PPTX
PPTX
PPT
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №1
PDF
Computerin tehnikin undes 1hicheeliin lektsiin huraangui
DOCX
PDF
PPTX
C++ vndsen oilgolt хичээл 1
PDF
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №2
PPT
PPTX
PPTX
C++ vndsen oilgolt хичээл 1
POTX
PPTX
More Related Content
PPTX
PPTX
PPTX
PPT
PPTX
PPTX
PPTX
PPTX
What's hot
PPTX
PPTX
PPTX
PPTX
PPTX
PPTX
PPT
PPTX
PPTX
PPT
Similar to Lec04 threads
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №1
PDF
Computerin tehnikin undes 1hicheeliin lektsiin huraangui
DOCX
PDF
PPTX
C++ vndsen oilgolt хичээл 1
PDF
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №2
PPT
PPTX
PPTX
C++ vndsen oilgolt хичээл 1
POTX
PPTX
PDF
си хэлний хичээлүүд 11 р анги
PDF
PDF
PPT
PPT
PPTX
PPT
С хэлний бусад сэдэв жишээ бодлого, тайлбар
PPTX
More from Khuder Altangerel
PPTX
IOI 2016 "Молекул" бодлогын бодолт
PPTX
PPTX
МХТ-ийн мэргэжилд шаардагдах гадаад хэлний чадвар
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №7
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №6
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №5
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №4
PDF
u.cs101 "Алгоритм ба програмчлал" Лекц №3
Lec04 threads 1. 2. Lec 4.29/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Орчин үеийн олон хуулбартай процесс
• Процесс: Нэг болон олон хуулбартай програм ажилахад
шаардлагатай зүйлсийг дүрсэлдэг үйлдлийн системийн
хийсвэрлэл юм.
• 2 хэсэгтэй:
– Олон хуулбартай
» Хуулбар болгон биелэлтийн дараалсан нэг урсгал юм.
– Нөөцийн хамгаалалт:
» Үндсэн санах ойн төлөв (Хаягийн огторгуйн агуулга)
» I/O төлөв (Жнь. Файлын заагч)
• Яагаад хуулбарыг пр-оос тусад нь авч үздэг вэ?
– Пр-ийг хуулбар талаас авч үзэх (давхцал)
– Хаягийн огторгуйгаас тусгаарлах (Хамгаалалт)
– Хүнд жингийн пр Нэг хуулбартай пр
3. Lec 4.39/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Нэг болон олон хуулбартай пр
• Хуулбар нь давхцалыг далдална.
– Пр-ийн идэвхтэй хэсэг
• Хаягийн огторгуй (ХО) нь хамгаалалтыг далдална.
– Алдаатай програм системийг унагахаас сэргийлнэ.
– Пр-ийн идэвхгүй хэсэг
4. Lec 4.49/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Агуулга
• Хуулбар пр-ийн нэмэлт ойлголт
• Хуулбар пр-ийн диспетчер
• Хуулбар пр-ийн төлөвлөлтийн тухай
Note: Some slides and/or pictures in the following are
adapted from slides ©2005 Silberschatz, Galvin, and Gagne
Note: Some slides and/or pictures in the following are
adapted from slides ©2005 Silberschatz, Galvin, and Gagne.
Many slides generated from my lecture notes by Kubiatowicz.
5. Lec 4.59/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Ангилал
• ҮС нь дараах хэлбэртэй
– Нэг эсвэл олон хаягийн огторгуйтай
– Нэг ХО-д нэг эсвэл олон хуулбартай
• Windows 95/98/ME нь санах ойн хамгаалалтай байсан уу?
– Үгүй: Хэрэглэгчид tables/System DLLs пр-руу бичдэг байсан.
Mach, OS/2, Linux,
Win 95?, Mac OS X,
Win NT to XP,
Solaris, HP-UX
Embedded systems
(Geoworks, VxWorks,
JavaOS,etc)
JavaOS, Pilot(PC)
Traditional UNIX
MS/DOS, early
Macintosh
Many
One
ХО-д
байх
хуулбар#:
ManyOne
ХО-гийн
тоо:
6. Lec 4.69/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Хуулбарын төлөв
• Нэг ХО-гийн бүх хуулбарууд хуваалцдаг төлвүүд
– Санах ойн агуулга (Глобал хувьсагч, Овоолго)
– I/O-ийн төлөв(Файл систем, Сүлжээний холболт, ...)
• Хуулбар бүрийн хувийн төлвүүд
– ХУБ-д хадгалдаг Хуулбар Пр-ийн Удирдах Блок
– CPU-ийн регистрүүд (оруулаад, Програм Тоолуур/ПТ/)
– Биелэлтийн стэк – Энэ юу вэ?
• Биелэлтийн стэк
– Параметр, Завсрын хувьсагч
– Дуудагдсан функц биелэж дуусаад буцах ПТ-гийн утгыг
хадгалдаг.
7. Lec 4.79/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Биелэлтийн стэкийн жишээ
• Стэк нь завсрын утгыг хадгална
• Рекурсив биелэлт хийх
боломжтой болгодог.
• Орчин үеийн хэлний хэлнүүдэд
маш чухал
A(int tmp) {
if (tmp<2)
B();
printf(tmp);
}
B() {
C();
}
C() {
A(2);
}
A(1);
A: tmp=2
ret=C+1Stack
Pointer
A: tmp=1
ret=exit
B: ret=A+2
C: ret=B+1
8. Lec 4.89/13/10 Kubiatowicz CS162 ©UCB Fall 2010
0 zero constant 0
1 at reserved for assembler
2 v0 expression evaluation &
3 v1 function results
4 a0 arguments
5 a1
6 a2
7 a3
8 t0 temporary: caller saves
. . . (callee can clobber)
15 t7
16 s0 callee saves
. . . (callee must save)
23 s7
24 t8 temporary (cont’d)
25 t9
26 k0 reserved for OS kernel
27 k1
28 gp Pointer to global area
29 sp Stack pointer
30 fp frame pointer
31 ra Return Address (HW)
MIPS: Регистрүүдийн Програм хангамжийн нэршил
• Before calling procedure:
– Save caller-saves regs
– Save v0, v1
– Save ra
• After return, assume
– Callee-saves reg OK
– gp,sp,fp OK (restored!)
– Other things trashed
9. Lec 4.99/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Нэг хуулбарын жишээ
• C дээр бичсэн доорх програмыг авч үзье:
main() {
ComputePI(“pi.txt”);
PrintClassList(“clist.text”);
}
• Яаж ажиллах вэ?
– Прогам ClassList-ийг хэвлэхгүй байж магадгүй.
– Яагаад? ComputePI хэзээ ч дуусахгүй байж магадгүй.
10. Lec 4.109/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Хуулбар хэрэглэхэд
• Хуулбартай хувилбар:
main() {
CreateThread(ComputePI(“pi.txt”));
CreateThread(PrintClassList(“clist.text”));
}
• “CreateThread” юу хийдэг вэ?
– Өгсөн функцийг ажиллуулах бие даасан хуулбар үүсгэнэ.
• Яаж ажиллах вэ?
– Одоо бол ClassList хэвлэгдэнэ.
– Энэ нь хоёр тусдаа CPU байгаа юм шиг ажиллана.
CPU1 CPU2 CPU1 CPU2
Time
CPU1 CPU2
11. Lec 4.119/13/10 Kubiatowicz CS162 ©UCB Fall 2010
2 хуулбартай жишээ
• Хэрэв зүгшрүүлэгч ашиглаад програмыг зогсоогоод
харах бол:
– CPU-ийн регистрүүдийн 2 багц байна.
– 2 Стэк байна.
• Асуулт:
– Стэкүүд хоорондаа харилцан яаж байрлах вэ?
– Бид стэкийн хамгийн их хэмжээг яаж сонгох вэ?
– Хуулбарын стэкийн хэмжээ хэтэрвэл юу болох вэ?
– Хэтэрснийг яаж мэдэх вэ?
Code
Global Data
Heap
Stack 1
Stack 2
AddressSpace
12. Lec 4.129/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Нэг хуулбарын төлөв
• Хуулбар бүр нэг ХУБ-тай.
– Биелэлтийн төлөв: CPU-ийн регистрүүд, Програмын төлөв,
Стэкийн заагч (SP)
– Төлөвлөлтийн мэдээлэл: Төлөв (удахгүй үзнэ), Зэрэглэл,
CPU-ийн хугацаа
– Бүртгэлийн мэдээлэл
– Бусад заагчид (төлөвлөлтийн дарааллыг хэрэгжүүлэхэд
шаардлагатай)
– Агуулж байгаа пр-ийн заагч? (ПУБ)? гэх мэт
• ҮС нь хамгаалагдсан санах ой дахь ХУБ-уудыг хянадаг.
– Массив, Холбоост жагсаалт, …
13. Lec 4.139/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Хуулбарын амьдралын цикл (эсвэл Пр)
• Хуулбарын ажиллагаа нь дараах төлвүүдтэй.
– шинэ: Хуулбар үүсэж байгаа
– бэлэн: Хуулбар ажиллахаар хүлээж байгаа
– ажиллах: Командыг биелүүлж байгаа
– хүлээх: Хуулбар ямар нэг үйл явдлыг хүлээж байгаа
– хаагдах: Хуулбар ажиллаж дууссан.
• Идэвхтэй хуулбарууд ХУБ-уудаар төлөөлөгддөг.
– ХУБ-уудыг төлөв дээр үндэслэн дараалалд байрлуулдаг.
14. Lec 4.149/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Бэлэн дараалал болон I/O-ийн төрөл бүрийн дарааллын
төхөөрөмж
• Хуулбар ажиллахгүй гэдэг нь ХУБ нь ямар нэг төлөвлөлтийн
дараалалд байна гэсэн үг.
– Төхөөрөмж/Сигнал/нөхцөл бүр дараалал нь тусдаа
– Дараалал бүр ялгаатай төлөвлөлтийн бодлоготой.
Other
State
TCB9
Link
Registers
Other
State
TCB6
Link
Registers
Other
State
TCB16
Link
Registers
Other
State
TCB8
Link
Registers
Other
State
TCB2
Link
Registers
Other
State
TCB3
Link
Registers
Head
Tail
Head
Tail
Head
Tail
Head
Tail
Head
Tail
Ready
Queue
Tape
Unit 0
Disk
Unit 0
Disk
Unit 2
Ether
Netwk 0
15. Lec 4.159/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Диспетчерийн давталт
• Ерөнхийдөө, ҮС-ийн диспетчерийн давталт дараах хэлбэртэй
харагдана:
Loop {
RunThread();
ChooseNextThread();
SaveStateOfCPU(curTCB);
LoadStateOfCPU(newTCB);
}
• Энэ бол хязгааргүй давталт
– ҮС хийдэг бүх зүйл бол дээрх хэсэг гэж хэлж болно.
• Бид ер нь давталтаас гарах ёстой юу???
– Тэгвэл хэзээ байх вэ?
16. Lec 4.169/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Хуулбарыг ажиллуулах
Эхний хэсгийг авч үзье: RunThread()
• Хуулбарыг яаж ажлуулах вэ?
– Төлвийг CPU руу ачааллах (registers, PC, stack pointer)
– Орчинг ачааллах (virtual memory space, etc)
– ПТ руу үсрэх
• Диспетчер удирдлагаа яаж буцааж авах вэ?
– Дотоод ү/а: Хуулбар удирдлагаа өөрөө буцааж өгөх
– Гадаад ү/а: Хуулбарын ажиллагааг зогсоох
17. Lec 4.179/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Дотоод ү/а
• I/O-ийн блок
– I/O хүсэлт гаргавал CPU-г автоматаар чөлөөлнө.
• Бусад хуулбараас сигнал хүлээх
– Хуулбар хүлээх хүсэлт гаргаад CPU-г чөлөөлнө.
• yield() хуулбар дууддаг.
– Хуулбар CPU-г сайн дураараа хүлээлгэж өгдөг.
computePI() {
while(TRUE) {
ComputeNextDigit();
yield();
}
}
18. Lec 4.189/13/10 Kubiatowicz CS162 ©UCB Fall 2010
CPU-г чөлөөлөх хуулбарын стэк
• Шинэ хуулбар яаж ажилладаг вэ?
run_new_thread() {
newThread = PickNewThread();
switch(curThread, newThread);
ThreadHouseKeeping(); /* next Lecture */
}
• Диспетчер шинэ хуулбар руу яаж шилжүүлдэг вэ?
– Дараагийн хуулбар дарж магадгүй бүх зүйлийг хадгална.:
PC, regs, stack
» Хуулбар бүрийг тусгаарлалтаар хангана.
yield
ComputePI
Stackgrowth
run_new_thread
kernel_yield
Trap to OS
switch
19. Lec 4.199/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Стэк ямар байдалтай харагддаг вэ
• Дараах кодын блокыг
авч үзье:
proc A() {
B();
}
proc B() {
while(TRUE) {
yield();
}
}
• 2 хуулбартай гэж үзье:
– Хуулбар S ба T
Хуулбар S
Stackgrowth
A
B(while)
yield
run_new_thread
switch
Хуулбар T
A
B(while)
yield
run_new_thread
switch
20. Lec 4.209/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Төлвийг хадгалах болон сэргээх (often called “Context
Switch)
Switch(tCur,tNew) {
/* Unload old thread */
TCB[tCur].regs.r7 = CPU.r7;
…
TCB[tCur].regs.r0 = CPU.r0;
TCB[tCur].regs.sp = CPU.sp;
TCB[tCur].regs.retpc = CPU.retpc; /*return addr*/
/* Load and execute new thread */
CPU.r7 = TCB[tNew].regs.r7;
…
CPU.r0 = TCB[tNew].regs.r0;
CPU.sp = TCB[tNew].regs.sp;
CPU.retpc = TCB[tNew].regs.retpc;
return; /* Return to CPU.retpc */
}
21. Lec 4.219/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Солилтын задаргаа
• Хэр олон регистр хадгалах болон сэргээх вэ?
– MIPS 4k: 32 Int(32b), 32 Float(32b)
– Pentium: 14 Int(32b), 8 Float(80b), 8 SSE(128b),…
– Sparc(v7): 8 Regs(32b), 16 Int regs (32b) * 8 windows =
136 (32b)+32 Float (32b)
– Itanium: 128 Int (64b), 128 Float (82b), 19 Other(64b)
• retpc нь хаашаа буцах ёстойг заадаг.
– Үнэндээ, энэ нь үсрэлт байдлаар хэрэгжүүлдэг.
22. Lec 4.229/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Солилтын задаргаа/үргэлжлэл/
• Солилтыг хэрэгжүүлэхдээ алдаа гарвал яах вэ?
– 4-р регистрийг хадгалах/сэргээхийг мартсан гэж үзье.
– Шинэ хуулбар 4-р регистрийг хэрэглэх тохиолдолд бодлого
солилт дээр алдаа гарна.
– Систем анхааруулгагүйгээр буруу үр дүн гаргах болно.
• Солилтын програмын кодыг бүрэн тестлэх тест боловсруулж
чадах уу?
– Үгүй! Маш олон боломжтой.
• Жишээ:
– Topaz кернелийн хурдыг ихэсгэхийн тулд солилтын үед 1
команд хадгалдаг байсан.
– Сайн тэмдэглэсэн!
» Кернелийн хэмжээ 1MB –аас бага үед ажиллана.
– Юу болсон бэ?
» Хэсэг хугацааны дараа хүмүүс мартсан.
» Сүүлд, кернелд шинж боломжуудыг нэмсэн (Хэн ч боломжуудыг
хасдаггүй!)
» Гэтэл хэвийн бус ажиллаж эхэлсэн
23. Lec 4.239/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Хуулбар I/O-гаар блоклогдох үед юу болох вэ?
• Хуулбар нэг файлын системээс өгөгдлийн нэг блокын
хүсэлт гаргахад юу болох вэ?
– Хэрэглэгчийн код системийн дуудалт хийнэ.
– Унших үйлдэл эхлүүлнэ.
– Шинэ хуулбарыг ажлуулна./Бас солилт/
• Хуулбарын харилцаа дараахтай адил
– Signal/Join – г хүлээх
– Сүлжээ
CopyFile
read
run_new_thread
kernel_read
Trap to OS
switch
Stackgrowth
24. Lec 4.249/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Гадаад ү/а
• Хуулбар хэзээ ч I/O хийдэггүй, хүлээдэггүй ба
чөлөөлдөггүй бол яах вэ?
– Could the ComputePI програм бүх нөөцийг эзэмшээд
пр-г хэзээ ч чөлөөлөхгүй байж чадах уу?
» Консол руу хэвлэхгүй бол яах вэ?
– Диспетчерт буцааж шилжүүлэх аргыг олох хэрэгтэй!
• Хариулт: Гадаад ү/а-уудыг хэрэглэх
– Тасалдалууд: Ажиллаж байгаа програмын кодыг
зогсоогоод үсэргэх ТХ болон ПХ-ийн сигналууд.
– Таймер: 10 миллсекунд тутамд ажилладаг сэрүүлэгтэй
цаг.
• Гадаад ү/а хангалттай болж байвал диспетчер
ажиллаж байна гэж үзэж болно.
25. Lec 4.259/13/10 Kubiatowicz CS162 ©UCB Fall 2010
add $r1,$r2,$r3
subi $r4,$r1,#4
slli $r4,$r4,#2
Raise priority
Reenable All Ints
Save registers
Dispatch to Handler
Transfer Network
Packet from hardware
to Kernel Buffers
Restore registers
Clear current Int
Disable All Ints
Restore priority
RTI-ReturnFromInts
“InterruptHandler”
Жишээ: Сүлжээний тасалдал
• Тасалдал гэдэг нь техник хангамжаар үүсгэгдсэн бодлого
солилт юм.
– Дараа нь ажиллахыг сонгох тусгай алхам байхгүй.
– Тасалдал боловсруулагчийг үргэлж шууд ажиллуулдаг.
lw $r2,0($r4)
lw $r3,4($r4)
add $r2,$r2,$r3
sw 8($r4),$r2
ExternalInterrupt
Pipeline Flush
26. Lec 4.269/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Таймерийн тасалдалыг ашиглан удирдлагыг
буцааж авах
• Диспетчер асуудлын шийдэл
– Таймерийн тасалдалыг ашиглан төлөвлөлтийг хүчээр
шийдэх
• Таймерийн тасалдалын код:
TimerInterrupt() {
DoPeriodicHouseKeeping();
run_new_thread();
}
• I/O –ий тасалдал: Таймерийн тасалдалтай адилхан
DoHousekeeping() -г ServiceIO()-аар солино.
Some Routine
run_new_thread
TimerInterrupt
Interrupt
switch
Stackgrowth
27. Lec 4.279/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Ажлуулах хуулбарыг сонгох
• Аль хуулбарыг ажиллахыг диспетчер яаж шийддэг вэ?
– Бэлэн хуулбар байхгүй бол – Диспетчер давтадаг.
» Өөр нэг арга нь “idle thread” үүсгэх
» Машиныг хэмнэлттэй горимд тохируулах
– Ганц бэлэн хуулбартай – Хялбар
– Нэгээс олон бэлэн хуулбартай: Төлөвлөхдөө зэрэглэлийг
хэрэглэх
• Зэрэглэлүүд дараах хэлбэртэй:
– LIFO (last in, first out):
» put ready threads on front of list, remove from front
– Санамсаргүй
– FIFO (first in, first out):
» Put ready threads on back of list, pull them from front
– Зэрэглэлтэй дараалал:
» Бэлэн дараалалд байгаа ХУБ-уудыг зэрэглэлээр нь эрэмбэлнэ.
28. Lec 4.289/13/10 Kubiatowicz CS162 ©UCB Fall 2010
Дүгнэлт
• Хуулбарын төлвийг ХУБ-д хадгална.
– Регистр, ПТ, SP
– Төлөв: New, Ready, Running, Waiting, or Terminated
• Олон хуулбартай үед олон CPU-тэй мэт ажиллана.
– Switch registers and stack to dispatch new thread
– Provide mechanism to ensure dispatcher regains control
• Switch routine
– Can be very expensive if many registers
– Must be very carefully constructed!
• Many scheduling options
– Decision of which thread to run complex enough for complete
lecture
Editor's Notes #16 Emergency crash of operating system called “panic()” #17 OS’s have almost human characteristics – unpredictable, hard to understand, …
Different things share the same CPU – one thread, then another
Similar to schizophrenia, like the movie Sybil, one body shared by several people, say we start with Dave Patterson
Threads are like the personalities of the CPU. First one thread/personality uses the CPU, then another,… #18 Yield is for really nice people – Ever see two people at the supermarket checkout line? You first, no you first, … #25 Patterson’s a nice guy, so he gives up the body after using it for awhile and let’s John Kubitowicz have it.
But Kubi’s not so nice, so he won’t give up control…
If you want to wake up for a final, you set your clock, or ask your roommate to pour water over your head – OS does the same