ความหมายของ Semaphore- การนับประเภทไบนารีพร้อมตัวอย่าง

ความหมายของ Semaphore?

Semaphore เป็นเพียงตัวแปรที่ไม่เป็นลบและแชร์กันระหว่างเธรด เซมาโฟร์เป็นกลไกการส่งสัญญาณ และเธรดที่กำลังรอเซมาโฟร์สามารถส่งสัญญาณโดยเธรดอื่นได้ โดยใช้การดำเนินการอะตอมมิกสองอย่างคือ 1) รอ และ 2) Signal เพื่อการซิงโครไนซ์กระบวนการ

เซมาฟอร์อนุญาตหรือไม่อนุญาตการเข้าถึงทรัพยากร ซึ่งขึ้นอยู่กับวิธีการตั้งค่า

ลักษณะของ Semaphore

นี่เป็นลักษณะของสัญญาณ:

  • เป็นกลไกที่สามารถนำไปใช้ให้เกิดการซิงโครไนซ์งานได้
  • เป็นกลไกการซิงโครไนซ์ระดับต่ำ
  • Semaphore จะเก็บค่าจำนวนเต็มที่ไม่เป็นลบเสมอ
  • Semaphore สามารถใช้งานได้โดยใช้การดำเนินการทดสอบและการขัดจังหวะ ซึ่งควรดำเนินการโดยใช้ตัวอธิบายไฟล์

ประเภทของ Semaphores

เซมาฟอร์ทั่วไปสองประเภทคือ

  • การนับเซมาฟอร์
  • เซมาฟอร์ไบนารี

การนับ Semaphores

ประเภทนี้ Semaphore ใช้การนับที่ช่วยให้สามารถรับหรือปล่อยงานได้หลายครั้ง หากการนับเริ่มต้น = 0 ควรสร้างเซมาโฟร์การนับในสถานะไม่พร้อมใช้งาน

การนับ Semaphores
การนับ Semaphores

อย่างไรก็ตาม หากจำนวนเป็น > 0 เซมาฟอร์จะถูกสร้างขึ้นในสถานะที่มีอยู่ และจำนวนโทเค็นที่มีจะเท่ากับจำนวน

เลขฐานสอง Semaphores

ซีมาโฟร์แบบไบนารีค่อนข้างคล้ายกับซีมาโฟร์แบบนับ แต่ค่าของซีมาโฟร์จะถูกจำกัดไว้ที่ 0 และ 1 ในซีมาโฟร์ประเภทนี้ การดำเนินการรอจะทำงานได้ก็ต่อเมื่อซีมาโฟร์มีค่าเท่ากับ 1 และการดำเนินการสัญญาณจะประสบความสำเร็จเมื่อซีมาโฟร์มีค่าเท่ากับ 0 การดำเนินการนี้ง่ายกว่าการใช้ซีมาโฟร์แบบนับ

เลขฐานสอง Semaphores

เลขฐานสอง Semaphores

ตัวอย่างของการ Semaphore

โปรแกรมที่ระบุด้านล่างเป็นการดำเนินการทีละขั้นตอน ซึ่งเกี่ยวข้องกับการใช้และการประกาศเซมาฟอร์

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

รอและ Signal Operaต่างๆใน Semaphores

ทั้งสองการดำเนินการนี้ใช้เพื่อดำเนินการ การซิงโครไนซ์กระบวนการเป้าหมายของการดำเนินการเซมาโฟร์นี้คือเพื่อให้ได้มาซึ่งการแยกกันซึ่งกันและกัน

รอ Operaการ

การดำเนินการเซมาโฟร์ประเภทนี้ช่วยให้คุณควบคุมการเข้าสู่ส่วนวิกฤตของงานได้ อย่างไรก็ตาม หากค่าของการรอเป็นบวก ค่าของอาร์กิวเมนต์การรอ X ก็จะลดลง ในกรณีที่มีค่าเป็นลบหรือเป็นศูนย์ จะไม่มีการดำเนินการใดๆ เกิดขึ้น เรียกอีกอย่างว่าการดำเนินการ P(S)

หลังจากที่ค่าเซมาฟอร์ลดลงซึ่งกลายเป็นลบ คำสั่งจะถูกพักไว้จนกว่าจะตรงตามเงื่อนไขที่ต้องการ

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Signal การดำเนินการ

ประเภทนี้ Semaphore การดำเนินการนี้ใช้เพื่อควบคุมการออกจากงานจากส่วนที่สำคัญ โดยจะช่วยเพิ่มค่าของอาร์กิวเมนต์ขึ้น 1 ซึ่งแสดงเป็น V(S)

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

การนับ Semaphore เทียบกับไบนารี่ Semaphore

ต่อไปนี้เป็นข้อแตกต่างที่สำคัญบางประการระหว่างการนับและสัญญาณไบนารี:

การนับ Semaphore เลขฐานสอง Semaphore
ไม่มีการยกเว้นซึ่งกันและกัน การกีดกันซึ่งกันและกัน
ค่าจำนวนเต็มใดๆ ค่าเพียง 0 และ 1
มากกว่าหนึ่งช่อง ช่องเดียวเท่านั้น
จัดเตรียมชุดของกระบวนการ มันมีกลไกการกีดกันซึ่งกันและกัน

ความแตกต่างระหว่าง Semaphore เทียบกับ Mutex

พารามิเตอร์ Semaphore มิวเท็กซ์
กลไก เป็นกลไกการส่งสัญญาณชนิดหนึ่ง มันเป็นกลไกการล็อค
ประเภทข้อมูล Semaphore เป็นตัวแปรจำนวนเต็ม Mutex เป็นเพียงวัตถุ
การเปลี่ยนแปลง การดำเนินการรอและสัญญาณสามารถปรับเปลี่ยนเซมาโฟร์ได้ ได้รับการแก้ไขโดยกระบวนการที่อาจร้องขอหรือปล่อยทรัพยากรเท่านั้น
การจัดการทรัพยากร หากไม่มีทรัพยากรใดว่าง กระบวนการจะต้องใช้ทรัพยากรที่จะดำเนินการรอ ควรจะรอจนกว่าจำนวนเซมาโฟร์จะมากกว่า 0 หากถูกล็อค กระบวนการต้องรอ ควรเก็บกระบวนการไว้ในคิว จำเป็นต้องเข้าถึงสิ่งนี้เฉพาะเมื่อมีการปลดล็อค mutex เท่านั้น
ด้าย คุณสามารถมีเธรดโปรแกรมได้หลายเธรด คุณสามารถมีเธรดโปรแกรมได้หลายเธรดในมิวเท็กซ์แต่ไม่พร้อมกันได้
กรรมสิทธิ์ ค่าสามารถเปลี่ยนแปลงได้โดยกระบวนการใดๆ ที่ปล่อยหรือรับทรัพยากร การล็อคอ็อบเจ็กต์จะถูกปล่อยโดยกระบวนการเท่านั้น ซึ่งได้รับการล็อคไว้แล้วเท่านั้น
ประเภท ประเภทของ Semaphore กำลังนับเซมาโฟร์และเซมาโฟร์แบบไบนารีและ Mutex ไม่มีชนิดย่อย
Operaการ Semaphore ค่าจะถูกแก้ไขโดยใช้การดำเนินการ wait () และ signal () อ็อบเจ็กต์ Mutex ถูกล็อคหรือปลดล็อค
การครอบครองทรัพยากร จะถูกครอบครองถ้าทรัพยากรทั้งหมดถูกใช้ไปแล้ว และกระบวนการร้องขอทรัพยากรดำเนินการรอ () และบล็อกตัวเองจนกว่าจำนวนซีมาโฟร์จะกลายเป็น >1 ในกรณีที่อ็อบเจ็กต์ถูกล็อคอยู่แล้ว กระบวนการที่ร้องขอทรัพยากรจะรอและเข้าคิวโดยระบบก่อนที่จะปลดล็อค

ข้อดีของการ Semaphores

นี่คือข้อดี/ประโยชน์ของการใช้ Semaphore:

  • อนุญาตให้มีมากกว่าหนึ่งเธรดในการเข้าถึงส่วนที่สำคัญ
  • Semaphores เป็นอิสระจากเครื่องจักร
  • Semaphores ถูกนำไปใช้ในโค้ดที่ไม่ขึ้นอยู่กับเครื่องของไมโครเคอร์เนล
  • พวกเขาไม่อนุญาตให้หลายกระบวนการเข้าสู่ส่วนที่สำคัญ
  • เนื่องจากมีงานยุ่งในการรอสัญญาณ จึงไม่มีการสิ้นเปลืองเวลาและทรัพยากรของกระบวนการ
  • พวกมันไม่ขึ้นกับเครื่องจักร ซึ่งควรรันในโค้ดที่ไม่ขึ้นกับเครื่องจักรของไมโครเคอร์เนล
  • ช่วยให้สามารถจัดการทรัพยากรได้อย่างยืดหยุ่น

ข้อเสียของเซมาฟอร์

นี่คือข้อเสีย/ข้อเสียของเซมาฟอร์

  • ข้อจำกัดที่ใหญ่ที่สุดประการหนึ่งของเซมาฟอร์คือการผกผันลำดับความสำคัญ
  • ระบบปฏิบัติการจะต้องติดตามการโทรทั้งหมดเพื่อรอและส่งสัญญาณเซมาโฟร์
  • การใช้งานของพวกเขาไม่เคยมีการบังคับใช้ แต่เป็นไปตามแบบแผนเท่านั้น
  • เพื่อหลีกเลี่ยงการหยุดชะงักในเซมาโฟร์ การรอและ Signal การดำเนินการต้องดำเนินการตามลำดับที่ถูกต้อง
  • Semaphore การเขียนโปรแกรมมีความซับซ้อน ดังนั้นจึงมีโอกาสที่จะไม่บรรลุการกีดกันซึ่งกันและกัน
  • นอกจากนี้ยังไม่ใช่วิธีการในทางปฏิบัติสำหรับการใช้งานขนาดใหญ่เนื่องจากการใช้งานนำไปสู่การสูญเสียความเป็นโมดูล
  • Semaphore มีแนวโน้มที่จะเกิดข้อผิดพลาดของโปรแกรมเมอร์มากขึ้น
  • อาจทำให้ การหยุดชะงัก หรือการละเมิดการยกเว้นร่วมกันเนื่องจากข้อผิดพลาดของโปรแกรมเมอร์

สรุป

  • Semaphore ถูกกำหนดให้เป็นตัวแปรที่ไม่ติดลบและใช้ร่วมกันระหว่างเธรด
  • เป็นกลไกที่สามารถนำไปใช้ให้เกิดการซิงโครไนซ์งานได้
  • การนับเซมาฟอร์ใช้การนับที่ช่วยให้งานได้รับหรือปล่อยหลายครั้ง
  • เซมาฟอร์ไบนารีค่อนข้างคล้ายกับการนับเซมาฟอร์ แต่ค่าของพวกมันถูกจำกัดไว้ที่ 0 และ 1
  • การดำเนินการรอช่วยให้คุณควบคุมการป้อนงานลงในส่วนที่สำคัญได้
  • Signal การดำเนินการเซมาโฟร์ใช้เพื่อควบคุมการออกจากงานจากส่วนที่สำคัญ
  • การนับ Semaphore ไม่มีการกีดกันซึ่งกันและกันในขณะที่ไบนารี Semaphore มีการกีดกันซึ่งกันและกัน
  • Semaphore หมายถึงกลไกการส่งสัญญาณ ในขณะที่มิวเท็กซ์เป็นกลไกการล็อค
  • Semaphore อนุญาตให้มีมากกว่าหนึ่งเธรดในการเข้าถึงส่วนที่สำคัญ
  • ข้อจำกัดที่ใหญ่ที่สุดประการหนึ่งของเซมาฟอร์คือการผกผันลำดับความสำคัญ