Process Synchronization

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Application Development Overview Nithi Thanon Computer Science Prince of Songkla University.
Advertisements

Process Synchronization
กระบวนการ (Process).
รู้จักกับเทคโนโลยี RFID เบื้องต้น
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
การประสานเวลากระบวนการ Process Synchronization
Critical-Section Problem
Javascripts.
โครงสร้างควบคุมการทำงาน
Synchronization (การประสานงาน)
การสร้าง WebPage ด้วย Java Script Wachirawut Thamviset.
หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรที่ ๑ ทักษะการโปรแกรม เบื้องต้น วันที่สาม.
การวนซ้ำโดยใช้โครงสร้าง for
BY KIADTIPONG YORD. CHANDRA 2004 :: COMPUTER NETWORK ระบบเครือข่ายคอมพิวเตอร์ และการกระจาย Computer Network and Distributed LAN Software เกียรติพงษ์ ยอดเยี่ยมแกร.
การแก้ปัญหาการใช้งาน ADO กับ Database อุทัย เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร วิทยาเขต สารสนเทศพะเยา.
บทที่ 5 การควบคุมทิศทางการทำงานของโปรแกรม
JSP ติดต่อฐานข้อมูล.
Starting fire with water การทำให้เกิดไฟด้วยน้ำ Or how I nearly burnt my car down หรือ ฉันทำให้รถเกือบจะลุกไหม้ได้อย่างไร.
ครูรุจิรา ทับศรีนวล “Room service”. “Room service”
Java Network Programming – Network Operating Systems and Protocols Choopan Rattanapoka.
Static Libraries ธวัชชัย เอี่ยมไพโรจน์. Static Libraries It is the simplest form of library. It is a collection of object files kept together in a ready-to-use.
Database Management System
Database & DBMS Architecture วรวิทย์ พูลสวัสดิ์. 2 2 ฐานข้อมูล (Database) - Data and its relation - Databases are designed to offer an organized mechanism.
1 XML & ASP.NET Nipat J Display XML data on the web Nipat J.
หลักการโปรแกรม 1 Lecture 8: การทำซ้ำ (while, do-while)
Timed Math Quiz. โปรแกรมสุ่มคำนวณเลขแข่งกับ เวลา.
1 exit() and break C++ provides a way to leave a program early (before its natural finish) with the exit() function. The format of exit() is as follows:
Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
Page : Stability and Statdy-State Error Chapter 3 Design of Discrete-Time control systems Stability and Steady-State Error.
คำสั่งควบคุมการทำงาน
Gas-Geothermal Combined Heat Exchanger for Gas Heating
Chapter 12 Microprocessor without Interlocked Pipeline Stages (MIPS)
หลักการโปรแกรม อ.ธนากร อุยพานิชย์.
การจัดการโปรเซส T.Kunlaya Charoenmongkonvilai
SQL Structured Query Language.
การประมวลผลแบบวน ( LOOP )
Integrity Constraints
C# Part 0: Introduction to Revision Control
INC 161 , CPE 100 Computer Programming
ภาษา JavaScript Webpage Design and Programming Workshop ( )
เทคโนโลยีสารสนเทศเพื่อการศึกษาค้นคว้า Information Technology for Study Skill 01/12/61.
PHP (2) - condition - loop
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
Yale Intrusion Alarm intrusion Introduction
บทที่ 4 ตัวแปร (Variables)
DEADLOCKS Advanced Operating System Operating System Technology
การออกแบบระบบ System Design.
อาจารย์ชนิดา เรืองศิริวัฒนกุล หลักสูตรสาขาวิชาเทคโนโลยีสารสนเทศ
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop)
Interrupt & Timer.
Control Statement เงื่อนไขคำสั่งในโปรแกรม ภาษา C
13 October 2007
Asst.Prof. Dr.Surasak Mungsing
รายวิชา ไมโครโปรเซสเซอร์ในงานอุตสาหกรรม
Lecture no. 1: Introduction to Computer and Programming
Java Translation Object and Class ในมุมมองคอมพิวเตอร์ Objects หรือ Instances หมายถึงวัตถุที่กำเนิดตัวตนจริงๆจากต้นแบบที่กำหนดโดยคลาส Object.
Binary Numbers Hexadecimal Numbers
Method and Encapsulation
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop) Part2
บทที่ 8 การแก้ไขข้อผิดพลาดโปรแกรม(Debugging)
2 E 2 S E M N G Requests and Replies
Injection.
การจัดบล๊อคและบัฟเฟอร์ (Blocking and Buffering)
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 12: เทคนิคการออกแบบขั้นตอนวิธีตอนวิธี Dynamic.
Thread outline What is thread?
Class Diagram.
CPU and I/O bursts.
Memory Management Ex. C = A + B A typical instruction-execution cycle
Virtual Memory Why? The need of memory more than the available physical memory. Process 3 Physical Memory Process 2 Process 1 Process 4.
ใบสำเนางานนำเสนอ:

Process Synchronization Buffer Producer Consumer ต้องมี buffer ถ้า read/write speed ไม่เท่ากัน Example Producer Consumer 1 Data Compression Encryption 2 Application grep, findstr 3 tar gzip ทำสลับ กันไม่ได้ ไม่ต้องเขียนลงฮาร์ดดิสก์ เขียนลง memory แทน และไม่เปลือง memory มาก

Circular Queue D A 1 in out 2 C 3 4 7 6 5 Variable count = 3

Producer & Consumer problem while (ยังต้อง produce อยู่) { while (counter == BUFFER_SIZE) buffer[in] = nextProduced in = (in + 1) % BUFFER_SIZE counter++ } Consumer: while (ยังต้อง consume อยู่) { while (counter == 0) nextConsumed = buffer[out] out = (out + 1) % BUFFER_SIZE counter --

Machine Language counter++ instr 1: register1 = counter instr 2: register1 = register1 + 1 instr 3: counter = register1 counter -- instr 1: register2 = counter instr 2: register2 = register2 – 1 instr 3: counter = register2 Let counter = 5 Executing (single core) 1 2 1 2 3 3 yields “counter = 4”

Critical Section A solution to the critical-section problem must satisfy: Mutual exclusion Progress Bounded waiting entry section critical section เพิ่ม code เข้าไปป้องกัน critical section exit section ขณะที่ไม่มี process ใน critical section Process ที่อยู่ใน entry section remainder section 3 1 2 5 4 Process ที่อยู่ใน remainder section เลือกมา 1 ตัว (progress หมายถึง การเลือก cannot be postponed indefinitely) ตัวที่ไม่ได้รับเลือก จะต้องเป็น bounded waiting

This software solution assumes atomic instructions. Obsolete! Peterson’s Solution int turn; // turn = 0, 1 process that is allowed to execute in its CS. boolean flag[2]; // flag[i] = true, process i is ready to enter its CS. Process 0 Process 1 do { critical section remainder section } while (TRUE); do { critical section remainder section } while (TRUE); flag[0] = TRUE; turn = 1; while (flag[1] && turn == 1); flag[1] = TRUE; turn = 0; while (flag[0] && turn == 0); flag[0] = FALSE flag[1] = FALSE This software solution assumes atomic instructions. Mutual exclusion, progress, bounded waiting are satisfied. แต่ทำได้แค่ 2 process เท่านั้น OS สมัยก่อนเป็นแบบ non-preemtive เพราะ CPU ยังไม่มี atomic instructions ดังนั้นต้องทำ critical section ให้เสร็จก่อนปล่อย CPU เช่น iPad, iOS < 4 (อาจจะเพราะพัฒนา kernel ไม่ทัน)

Not satisfy bounded-waiting requirement Sync. HW: TestAndSet boolean TestAndSet(boolean *target) { // atomically by hardware boolean rv = *target; // even in multi-processors *target = TRUE; return rv; } Shared variable เริ่มต้น lock = FALSE; do { while (TestAndSet(&lock)); // critical section lock = FALSE; // remainder section } while (TRUE); do { while (TestAndSet(&lock)); // critical section lock = FALSE; // remainder section } while (TRUE); Not satisfy bounded-waiting requirement

Not satisfy bounded-waiting requirement Sync. HW: Swap void Swap(boolean *a, boolean *b) { // atomic instruction (HW) boolean temp = *a; *a = *b; *b = temp; } Shared variable lock = FALSE; Bounded waiting not satisfied! do { key = TRUE; while (key == TRUE) Swap(&lock, &key); // critical section lock = FALSE; // remainder section } while (TRUE); do { key = TRUE; while (key == TRUE) Swap(&lock, &key); // critical section lock = FALSE; // remainder section } while (TRUE); Not satisfy bounded-waiting requirement

Bounded-waiting mutual exclusion ต้องจัดคิวให้ process ที่รออยู่ เริ่มต้น waiting[i] = false; lock = false; do { waiting[i] = TRUE; key = TRUE; while (waiting[i] && key) key = TestAndSet(&lock); waiting[i] = FALSE; // critical section j = (i + 1) % n; while ((j != i) && !waiting[j]) j = (j + 1) % n; if (j == i) lock = FALSE; else waiting[j] = FALSE; // remainder section } while (TRUE); รอใช้ critical section ได้เข้าใช้ CS แล้ว ค้นหา process ที่รอใช้ CS (หาไปทางขวา) ใม่มี process อื่นที่รอใช้ CS Unlock ปล่อย CS มี process j รอใช้ CS ส่งมอบ CS ให้ process ตัวแรกที่อยู่ถัดไปทางขวา

Shared variable between process Semaphores ใน critical section มี resource อยู่ S ชิ้น เป็น mutual exclusive wait(S) { while (S <= 0); S-- } signal(S) { S++ } S คือจำนวนทรัพยากรที่มี ถ้า 1 process ใช้ทรัพยากร 1 ชิ้น ก็จะเข้าใช้ได้พร้อมกันไม่เกิน S process Shared variable between process S = 10 wait(S) Critical section Critical section signal(S) Semaphore is a system call. No processes can execute wait() or signal() at the same time by using the previously described technique.

Semaphores: spinlock do { // n = #resources wait(n); // critical section signal(n); // remainder section } while (TRUE); หยุดรอจนกว่าจะเข้า CS ได้ หรือ หมด time quantum การหยุดรอ CS มี 2 options คือ Spinlock ใช้ time quantum ต่อไป No spinlock เรียก context-switch เข้า CS Spin ก็คือ while loop รอ CS user process user process ได้เข้าใช้ CS Spinlock user process Kernel (scheduler) another process No spinlock Semaphore แบบ spinlock ไม่รับประกัน bounded waiting ดูหน้าต่อไป

Semaphores: no-spinlock Ensure bounded waiting by FIFO queue typedef struct { int value; struct process *list; } semaphore; – S + #processes waiting #processes allowed wait(semaphore *S) { S -> value--; if (S -> value < 0) { append this process to S -> list; block(); // context switch } signal(semaphore *S) { S -> value++; if (S -> value <= 0) { // FIFO remove a process P from S -> list; wakeup(P); } No spinlock Ensure bounded waiting by FIFO queue

Error diffusion on multi-core processors Spinlock: A case study Error diffusion on multi-core processors Use spinlock, do not allow context-switch !!!

Web App (Race condition) มีผู้สมัครกี่คนแล้ว (n) แจก ID = n + 1 ให้ผู้สมัคร ถ้าไม่ป้องกัน จะมีคนได้ ID ซ้ำกัน A case study เกิด exception ตอน save ลง DB มีคนสมัครไม่ได้จำนวนมาก Disaster !!! Web Application Browser Browser Browser โรงแรมรอยัลพลาซ่าถล่ม(ตึกถล่ม)พ.ศ.2536

History's Worst Software Bugs July 28, 1962 -- Mariner I space probe 1982 -- Soviet gas pipeline 1985-1987 -- Therac-25 medical accelerator (race condition) At least five patients die; others are seriously injured. 1988 -- Buffer overflow in Berkeley Unix finger daemon 1985-1987 -- Therac-25 medical accelerator. A radiation therapy device malfunctions and delivers lethal radiation doses at several medical facilities. Based upon a previous design, the Therac-25 was an "improved" therapy system that could deliver two different kinds of radiation: either a low-power electron beam (beta particles) or X-rays. The Therac-25's X-rays were generated by smashing high-power electrons into a metal target positioned between the electron gun and the patient. A second "improvement" was the replacement of the older Therac-20's electromechanical safety interlocks with software control, a decision made because software was perceived to be more reliable. What engineers didn't know was that both the 20 and the 25 were built upon an operating system that had been kludged together by a programmer with no formal training. Because of a subtle bug called a "race condition," a quick-fingered typist could accidentally configure the Therac-25 so the electron beam would fire in high-power mode but with the metal X-ray target out of position. At least five patients die; others are seriously injured. http://www.wired.com/software/coolapps/news/2005/11/69355?currentPage=all

Solutions from students PHP flock (ล็อคไฟล์) mutex (ใช้ library) ล็อค port .NET Lock(object) Application.Lock() ใช้ได้เฉพาะ ASP.NET ล็อคเกิน scope ที่ต้องการ !!! Semaphore (ต้องประกาศเป็น static) Monitor.Lock() JAVA Synchronized (ชื่อคลาส.class) General solution Auto-increment (database feature) ทำได้ทั้ง My SQL และ MS SQL Server Inter-process Semaphore (C#) ต้อง import DLL เพื่อเรียก Win32 ให้ OS สร้าง semaphore ให้ Lock table (lock table [ชื่อตาราง] write) ออก (unlock tables)

lock Statement (C# Reference) ถ้าตัวแปร lock เป็นแบบ static จะเกิดอะไรขึ้น ภาษา Java ใช้ synchronized กรณี WebApp ต้องใส่ static ให้ object ที่เป็น lock กรณี Account ไม่ต้องใส่ static ให้ object ที่เป็น lock https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/lock-statement

http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html

http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html

กิจกรรม เรียนหลักสูตรออนไลน์ (ต้องมี amazon account ก่อน) Link to the Online Course