การจัดการหน่วยความจำหลัก

advertisement
การจัดการหน่ วยความจาหลัก
(Memory Management)
เนื ้อหา
Background
 Memory management
 การแบ่ งส่ วน
 การสับเปลี่ยนการทางาน
 การจัดสรรพืน
้ ที่ร่วมกัน
 การจัดพืน
้ ที่หน้ าเพจ
 การแบ่ งตอน

เนื่องจากโปรแกรมต้ องมีพนื ้ ที่ในหน่ วยความจาเพื่อเก็บ
ข้ อมูลในระหว่ างทางาน
 แถวคอยข้ อมูลเข้ า (Input queue) ของโปรเซส
ทัง้ หมดที่อยู่บนดิสก์ ซึ่งรอคอยที่จะเข้ าไปทางานใน
หน่ วยความจาหลัก
 CPU สามารถเข้ าถึงหน่ วยความจาและ register ได้
โดยตรง

Memory Management
Subdividing memory to accommodate
multiple processes
 Memory needs to be allocated to ensure
a reasonable supply of ready processes to
consume available processor time

Memory Management Requirements

Relocation
◦ Programmer does not know where the
program will be placed in memory when it is
executed
◦ While the program is executing, it may be
swapped to disk and returned to main
memory at a different location (relocated)
◦ Memory references must be translated in the
code to actual physical memory address
Addressing Requirements for a Process
Memory Management Requirements

Protection
◦ Processes should not be able to reference memory
locations in another process without permission
◦ Impossible to check absolute addresses at compile
time
◦ Must be checked at run time
◦ Memory protection requirement must be satisfied by
the processor (hardware) rather than the operating
system (software)
 Operating system cannot anticipate all of the memory
references a program will make
Memory Management Requirements

Sharing
◦ Allow several processes to access the same
portion of memory
◦ Better to allow each process access to the
same copy of the program rather than have
their own separate copy
Memory Management Requirements

Logical Organization
◦ Programs are written in modules
◦ Modules can be written and compiled
independently
◦ Different degrees of protection given to
modules (read-only, execute-only)
◦ Share modules among processes
Memory Management Requirements

Physical Organization
◦ Memory available for a program plus its data
may be insufficient
 Overlaying allows various modules to be assigned
the same region of memory
◦ Programmer does not know how much space
will be available
Hardware Address Protection

Compile time ขณะเกิดการคอมไพล์
◦ หากการจัดสรรพืน้ ที่ของหน่ วยความจาทราบตัง้ แต่ แรกก็จะสามารถสร้ างโค้ ดได้
◦ ต้ องคอมไพล์ โค้ ด หากพืน้ ที่ในการเริ่มต้ นการทางานเปลี่ยนแปลง

Load time ขณะเกิดการโหลด
◦ จะต้ องสร้ างโค้ ดที่สามารถจัดสรรพืน้ ที่หน่ วยความจาขึน้ ใหม่ หากไม่ ทราบถึง
การจัดสรรพืน้ ที่หน่ วยความจาในขณะคอมไพล์

Execution time ขณะเกิดการเอ็กซ์ ซีควิ ท์
◦ การแมพความสัมพันธ์ หรื อเชื่อมโยงต้ องล่ าช้ า จนกว่ าจะเกิดการประมวลผล
◦ หากโปรเซสถูกเคลื่อนย้ ายในระหว่ างกาลังเอ็กซ์ ซีควิ ท์ จากพืน้ ที่หนึ่งใน
หน่ วยความจาไปยังพืน้ ที่อ่ ืนๆ จาเป็ นต้ องอาศัยฮาร์ ดแวร์ ในการแมพแอดเดรส
ตาแหน่ งที่ว่างทางตรรกะกับตาแหน่ งที่ว่างทางกายภาพ
(Logical vs. Physical address space)

แนวคิดของพืน้ ที่แอดเดรสเชิงตรรกะ เป็ นการนาพืน้ ที่แอดเดรสเชิง
กายภาพหลายพืน้ ที่มารวมกันไว้ ท่ สี ่ วนกลางเพื่อการบริหารจัดการ
หน่ วยความจา
◦ Logical address – แอดเดรสเชิงตรรกะ ( แอดเดรสเสมือน ) ถูก
สร้ างขึน้ โดยหน่ วยประมวลผลกลาง และถูกอ้ างถึงโดยแอดเดรสเสมือน
◦ Physical address – แอดเดรสเชิงกายภาพ เห็นได้ เฉพาะหน่ วย
ย่ อยของหน่ วยความจา
แอดเดรสเชิงตรรกะและเชิงกายภาพ คือสิ่งเดียวกันของการแมพ
แอดเดรสในขณะคอมไพล์ และขณะโหลด
 แอดเดรสเชิงตรรกะและแอดเดรสเชิงกายภาพ จะแตกต่ างกันของ
การแมพแอดเดรส ในขณะเอ็กซ์ ซีควิ ท์

ตาแหน่ งที่ว่างทางตรรกะกับตาแหน่ งที่ว่างทางกายภาพ
(Logical vs. Physical address space)
กลุ่มของตาแหน่ งทางตรรกะทัง้ หมดที่ถูกสร้ างโดยโปรแกรมจะถูก
เรี ยกว่ า ตาแหน่ งที่ว่างทางตรรกะ (logical
address
space)
 กลุ่ ม ของต าแหน่ ง ที่ ว่ า งทางกายภาพที่ เ กี่ ย วข้ อ งกั บ ต าแหน่ ง ทาง
ตร ร ก ะ เ ห ล่ า นั ้ น ถู ก เ รี ย ก ว่ า ต า แ ห น่ ง ที่ ว่ า ง ท า ง ก า ย ภ า พ
(physical address space)

อุปกรณ์ ฮาร์ ดแวร์ ที่ทาการแมพระหว่ างแอดเดรสเสมือนกับ
แอดเดรสทางกายภาพ
 ค่ าที่เก็บอยู่ในรี จีสเตอร์ เพื่อการจัดสรรพืน
้ ที่ใหม่ จะถูกเพิ่มเข้ าสู่
แอดเดรสทุกๆ แอดเดรสที่ถูกสร้ างขึน้ โดยโปรเซสของผู้ใช้ ใน
ขณะที่โปรเซสนัน้ ถูกส่ งเข้ าสู่หน่ วยความจา

◦ Base register เรียกเป็ น Relocation register

การทางานของโปรแกรมของผู้ใช้ จะใช้ แอดเดรสเชิงตรรกะ จะไม่
ทราบถึงแอดเดรสทางกายภาพจริงๆ
◦ การแมพแอดเดรสจะเกิดขึน้ ต่ อเมื่อเกิดการอ้ างอิงไปที่หน่ วยความจาหลัก
จากรู ปรี จีสเตอร์ ฐาน (base register) กลายเป็ น รี จีสเตอร์ สาหรั บการย้ าย
ตาแหน่ ง (relocation register)
 การอ้ างอิงตาแหน่ งในหน่ วยความจาทุกครั ง้ ต้ องนาค่ าอ้ างอิงมาบวกกับค่ ารี จีสเตอร์
ฐานเสียก่ อน เพื่อให้ ได้ ค่าตาแหน่ งจริง

◦ เช่ น ค่ ารี จีสเตอร์ ฐานเท่ ากับ 14000 ผู้ใช้ ต้องการอ่ านค่ าจากตาแหน่ ง 346 ก็จะไปอ่ าน
จากตาแหน่ งจริงที่ 14000 + 346 = 14346 เป็ นต้ น

จะสังเกตเห็นว่ า ในระบบนีม้ ีการกาหนดตาแหน่ ง 2 แบบ
คือ
◦ ตาแหน่ งทางตรรกะ คือ ค่ า 0 ถึง max
◦ ตาแหน่ งจริง (ทางกายภาพ) คือ ค่ าจาก R ถึง R+max โดย
R เป็ นค่ าตาแหน่ งเริ่มต้ น
โปรแกรมของผู้ใช้ จะใช้ ตาแหน่ งทางตรรกะเท่ านัน้
 แนวคิดเรื่ องการใช้ ตาแหน่ งทางตรรกะในการอ้ างอิงแทน
ตาแหน่ งจริงนีเ้ ป็ นหัวใจของการจัดการหน่ วยความจาหลัก

วิ ธี นี ้ จ ะไม่ น า โปรแกรมย่ อย ลง สู่ ห น่ วยความจ าพร้ อมกั บ
โปรแกรมหลัก แต่ จะนาลงเมื่อมีการเรี ยกใช้ เท่ านัน้ โปรแกรมย่ อย
ทัง้ หมดจะอยู่ในจานบันทึกในรู ปแบบที่ย้ายตาแหน่ งได้
 เมื่ อ โปรแกรมหลั ก ต้ อ งการเรี ย กโปรแกรมย่ อยใด ก็จ ะตรวจดู ว่ า
โปรแกรมย่ อยนัน้ อยู่ในหน่ วยความจาแล้ วหรื อยัง
◦ ถ้ ายังก็จะนาโปรแกรมย่ อยนัน้ ลงสู่หน่ วยความจาหลัก
 ย้ ายตาแหน่ งไปไว้ ในที่ท่ ีเหมาะสม
 ย้ ายการควบคุมไปไว้ ท่ ีโปรแกรมย่ อยนัน้ เพื่อทางานต่ อไป
 ประโยชน์ ของวิธีนีค้ ือ โปรแกรมย่ อยที่ไม่ ได้ ใช้ กจ
็ ะไม่ ถูกนาลงสู่
หน่ วยความจาหลักให้ เสียเนือ้ ที่เปล่ า ๆ

ขณะเชื่ อ มต่ อ โปรแกรมย่ อ ย จะมี ก ารสร้ างชุ ด ค าสั่ งเรี ย กระบบ
(Stub) ซึ่งมีขนาดเล็กมาก เพื่อใช้ เรี ยกโปรแกรมย่ อยที่ต้องการ
ขณะทางาน
 ชุดคาสั่งเรี ยกระบบนี จ้ ะทางานโดยการเปลี่ยนโปรแกรมตัวเองเป็ น
ตาแหน่ งของโปรแกรมย่ อยในระบบและเรี ยกโปรแกรมย่ อยนัน้
 เมื่อมีการใช้ ชุดคาสั่งเรี ยกระบบนี อ
้ ีกครั ง้ โปรแกรมย่ อ ยของระบบก็
จะถูกเรี ยกทางานโดยตรง (โดยไม่ เสียเวลาทางานในชุดคาสั่ง เรี ยก
ระบบนีอ้ ีกต่ อไป)
 วิธีนีย้ ังประหยัดเนื อ
้ ที่มากอีกด้ วย เพราะโปรแกรมของผู้ ใช้ ต่างใช้
โปรแกรมย่ อยของระบบอันเดียวกัน (ไม่ เกิดการซา้ ซ้ อน)

เนื่องจากต้ องมีการนาโปรแกรมทัง้ หมดของกระบวนการหนึ่ง ลงใน
หน่ วยความจาก่ อนจะเริ่มทางาน
 ขนาดของกระบวนการจะถู ก จ ากั ด ด้ ว ยขนาดของหน่ ว ยความจ า
หลัก เราจึงต้ องมีการแบ่ งส่ วน (Overlays)
กระบวนการ
ออกเป็ นส่ วน ๆ เพื่อให้ สามารถทางานในหน่ วยความจาหลักได้
 การแบ่ งส่ วนนีท
้ าโดย
◦ แบ่ งส่ วนของโปรแกรมและข้ อมูลที่ต้องการใช้ ในช่ วงเวลาแรกให้
เข้ าทางานในหน่ วยความจาหลัก
◦ นาโปรแกรมช่ วงต่ อไปลงทับโปรแกรมเดิม หลังจากที่โปรแกรม
ช่ วงแรกทางานเสร็จแล้ ว

ตัวอย่ างเช่ น ตัวแปรภาษา assembly แบบแปล 2 รอบ
◦ รอบแรกจะมีการสร้ างตารางสัญลักษณ์
◦ รอบที่สองจะมีส่วนการแปลภาษาเครื่ อง เราอาจทาการแบ่ งส่ วน
ตัวแปลภาษานีอ้ อกเป็ น 2 ส่ วน
 ส่ วนของการแปลรอบที่หนึ่ง
 ส่ วนของการแปลรอบที่สอง
 สมมติให้ โปรแกรมตัวแปลภาษามีขนาด ดังนี ้
1. ส่ วนการแปลรอบที่ 1(Pass 1)
70 KB
2. ส่ วนการแปลรอบที่ 2 (Pass 2)
80 KB
3. ตารางสัญลักษณ์ (Symbol table)
20 KB
4. โปรแกรมย่ อยร่ วม (Common routines) 30 KB
200 KB

ถ้ าเราต้ องการนาโปรแกรมทัง้ หมดลงสู่หน่ วยความจาหลัก เราต้ อง
มีหน่ วยความจาหลักขนาดอย่ างน้ อย 200 K
 แต่ ถ้าเรามีเพียง 150 K (ที่เหลือจากส่ วนของระบบปฏิบัตก
ิ าร)
ก็จะทางานไม่ ได้ เราจึงต้ องใช้ วธิ ีแบ่ งส่ วน (overlays)
◦ กาหนดส่ วนแรก (A)
ประกอบด้ วย ตารางสั ญลั กษณ์
โปรแกรมย่ อยร่ วม และส่ วนการแปลรอบที่ 1
◦ ส่ วนที่สอง (B) ประกอบด้ วย ตารางสัญลักษณ์ โปรแกรมย่ อย
ร่ วมและส่ วนการแปลรอบที่ 2

กระบวนการที่กาลังทางานต้ องอยู่ในหน่ วยความจาหลักเสมอ แต่
อาจถูกย้ ายไปอยู่ในหน่ วยเก็บโปรแกรมชั่วคราว (Backing
Store) ได้ แล้ วนากลับมาใหม่ เพื่อทางานต่ อ
 ในระบบการทางานแบบหลายโปรแกรมที่ใช้ การจัดตารางการ
ทางานแบบวนรอบ(round-robin)
◦ เมื่อส่ วนแบ่ งเวลา (Time Quantum) สิน้ สุด ตัวจัดการ
หน่ วยความจาจะย้ ายกระบวนการปั จจุบันออกไปและเอา
กระบวนการใหม่ เข้ ามาทางานแทน

ขณะเดียวกัน ตัวจัดตารางการทางานของหน่ วยประมวลผลกลาง ก็จะ
จัดเวลาให้ กระบวนการใหม่ ได้ ทางานบ้ าง จะเห็นว่ ามีการสับเปลี่ยนกัน
ระหว่ าง
◦ กระบวนการเก่ าและกระบวนการใหม่
◦ จากหน่ วยความจาหลักสู่หน่ วยเก็บโปรแกรมชั่วคราว
 การสับเปลี่ยนงาน อาจเกิดในระบบที่ใช้ ความสาคัญเป็ นเกณฑ์ ในการ
จัดตารางการทางาน (Priority based)
◦ เมื่อมีงานที่มีความสาคัญสูงเข้ ามาในระบบ ตัวจัดการหน่ วยความจา
อาจสับเปลี่ยนให้ งานที่มีความสาคัญต่าออกไปพักชั่วคราว
◦ ให้ งานความสาคัญสูงเข้ าทางานจนเสร็จก่ อน จึงสับเปลี่ยนงาน
ความสาคัญต่ากลับมาทางานต่ อ เรี ยกวิธีนีว้ ่ า หมุนออกและหมุนเข้ า
(roll-out , roll-in)


ในการสับเปลี่ยนงาน ต้ องแน่ ใจว่ ากระบวนการไม่ ได้ มีอะไรติดค้ าง
อยู่ โดยเฉพาะอย่ างยิ่งการรอคอยอุปกรณ์ รับส่ งข้ อมูล
◦ ถ้ ากระบวนการหนึ่งต้ องรออุปกรณ์ รับส่ งข้ อมูล อาจต้ องการ
สับเปลี่ยนกระบวนการนีอ้ อกไป คอยในหน่ วยเก็บโปรแกรม
ชั่วคราว
◦ ขณะเดียวกันอุปกรณ์ รับส่ งข้ อมูลอาจต้ องใช้ ท่ พ
ี ักข้ อมูลในเนือ้ ที่
ของกระบวนการผู้ใช้ เพื่อรั บส่ งข้ อมูลให้ แก่ ผ้ ูใช้
◦ ถ้ ากระบวนการเดิมถูกสับเปลี่ยนออกไปและมีกระบวนการใหม่
เข้ ามาแทนที่อุปกรณ์ รับส่ งข้ อมูลอาจส่ งข้ อมูลไปผิดกระบวนการ
ได้

ปั ญหานีอ้ าจแก้ ไขได้ 2 วิธีคือ
◦ ห้ ามสับเปลี่ยนงานที่รอคอยการรั บส่ งข้ อมูล
◦ การรั บส่ งข้ อมูลนัน้ ต้ องใช้ ท่ พ
ี ักข้ อมูลภายในเนือ้ ที่ของ
ระบบปฏิบัตกิ ารเท่ านัน้ และระบบจะส่ งต่ อให้ กระบวนการเมื่อ
กระบวนการกาลังทางานอยู่ในหน่ วยความจาหลักเท่ านัน้

โดยปกติหน่ วยความจาหลักจะถูกแบ่ งออกเป็ นสองส่ วนหลัก
◦ พืน้ ที่สาหรั บระบบปฏิบัตกิ าร โดยปกติจะอยู่ในส่ วนพืน้ ที่
ด้ านล่ างของหน่ วยความจาหรื อแอดเดรสเริ่มต้ น โดยการจัดการ
ของเวกเตอร์ การขัดจังหวะ
◦ พืน้ ที่โปรเซสของผู้ใช้ อยู่ในส่ วนพืน้ ที่ด้านบนของหน่ วยความจา
หรื อแอดเดรสหลังจากระบบปฏิบัตกิ าร
Relocation register ใช้ ในการป้องกันโปรเซสของผู้ใช้
จากแหล่ งอื่น และจากการเปลี่ยนแปลงโค้ ดและข้ อมูลของ
ระบบปฏิบัตกิ าร
 Base register จะมีค่าของแอดเดรสทางกายภาพที่เล็กที่สุด
 Limit register จะมีค่าของช่ วงของแอดเดรสทางตรรกะ

◦ แอดเดรสทางตรรกะแต่ ละค่ าจะต้ องมีค่าน้ อยกว่ าขนาดของ
รี จีสเตอร์
Fixed Partitioning

Equal-size partitions
◦ Any process whose size is less than or equal
to the partition size can be loaded into an
available partition
◦ If all partitions are full, the operating system
can swap a process out of a partition
◦ A program may not fit in a partition. The
programmer must design the program with
overlays
Fixed Partitioning

Main memory use is inefficient. Any
program, no matter how small, occupies
an entire partition. This is called internal
fragmentation.
Placement Algorithm with Partitions

Equal-size partitions
◦ Because all partitions are of equal size, it does
not matter which partition is used

Unequal-size partitions
◦ Can assign each process to the smallest
partition within which it will fit
◦ Queue for each partition
◦ Processes are assigned in such a way as to
minimize wasted memory within a partition
Memory Assignment for Fixed Partitioning
พืน้ ที่ว่างหมายถึงพืน้ ที่ว่างขนาดต่ างๆของหน่ วยความจาที่พร้ อมใช้ งาน
ต่ อเนื่องกันในหน่ วยความจา
 เมื่อมีโปรเซสเกิดขึน
้ โปรเซสจะได้ รับจัดสรรพืน้ ที่ในหน่ วยความจา
จากพืน้ ที่ว่างที่มีขนาดใหญ่ พอสาหรั บโปรเซสนัน้
 ระบบปฏิบัตก
ิ ารบริหารจัดการสารสนเทศต่ างๆ ดังต่ อไปนี ้
 การแบ่ งส่ วนพืน้ ที่เพื่อการจัดสรร
 การกาหนดส่ วนพืน้ ที่ว่าง

ในระบบปฏิบัตกิ ารจะมีตารางที่เก็บข้ อมูลว่ าพืน้ ที่ใน
หน่ วยความจาหลักส่ วนใดถูกครอบครองและส่ วนใดยังว่ างอยู่
 เริ่ มต้ นพืน
้ ที่ในหน่ วยความจาจะว่ างทัง้ หมด

◦ เมื่อมีกระบวนการเข้ ามาในระบบ ระบบจะจัดการหาพืน้ ที่ท่ ีใหญ่ พอ
สาหรั บกระบวนการนัน้ และจัดแบ่ งพืน้ ที่ให้ กระบวนการเพียงเท่ าที่
ต้ องการ
◦ ส่ วนพืน้ ที่ท่ เี หลืออยู่กจ็ ะเก็บไว้ ใช้ ในการจัดสรรครั ง้ ต่ อไป
Dynamic Partitioning
Partitions are of variable length and
number
 Process is allocated exactly as much
memory as required
 Eventually get holes in the memory. This is
called external fragmentation
 Must use compaction to shift processes
so they are contiguous and all free
memory is in one block

The Effect of Dynamic Partitioning
Dynamic Partitioning Placement
Algorithm
Operating system must decide which free
block to allocate to a process
 Best-fit algorithm

◦ Chooses the block that is closest in size to
the request
◦ Worst performer overall
◦ Since smallest block is found for process, the
smallest amount of fragmentation is left
◦ Memory compaction must be done more
often
Dynamic Partitioning Placement
Algorithm

First-fit algorithm
◦ Scans memory form the beginning and
chooses the first available block that is large
enough
◦ Fastest
◦ May have many process loaded in the front
end of memory that must be searched over
when trying to find a free block
Dynamic Partitioning Placement
Algorithm

Next-fit
◦ Scans memory from the location of the last
placement
◦ More often allocate a block of memory at the
end of memory where the largest block is
found
◦ The largest block of memory is broken up
into smaller blocks
◦ Compaction is required to obtain a large
block at the end of memory
ตัวอย่ าง
 ระบบมีหน่ วยความจาหลักขนาด
◦ มีโปรแกรมของระบบใช้ พนื ้ ที่อยู่
◦ ส่ วนว่ างที่เหลือสาหรับผู้ใช้
2560 K
400 K
2160 K
สมมติให้ในแถวคอยข้อมูลเข้า (input queue) มีกระบวนการดังรู ป

ระบบใช้ วธิ ีจัดตารางการทางานระยะยาวแบบมาก่ อน-ได้ ก่อน
◦ สามารถจัดสรรพืน้ ที่ให้ แก่ กระบวนการ P1 , P2 และ P3
ได้ ทันที
◦ ดังภาพของหน่ วยความจาในรู ป (a) จะเห็นว่ ามีพนื ้ ที่ว่างขนาด
260 K ซึ่งไม่ เพียงพอกกับขนาดของกระบวนการ P4 ที่รอ
อยู่ในแถวคอยขาเข้ า

ระบบใช้ วธิ ีจัดตารางการทางานแบบวนรอบ(round-robin) โดย
ส่ วนแบ่ งเวลามีค่าเท่ ากับ 1 หน่ วยเวลา
◦ ณ เวลาที่ 14 หน่ วยเวลา กระบวนการ P2 จะทางานเสร็จ พืน้ ที่ท่ ี
P2 ครอบครองอยู่จะว่ างลง ดังรู ป (b)
◦ กระบวนการ P4 จึงสามารถเข้ ามาทางานได้ ดังรู ป (c)
◦ เมื่อกระบวนการ P1 ทางานเสร็จ ณ เวลาหน่ วยที่ 28 ดังรู ป (d)
กระบวนการ P5 ก็สามารถเข้ ามาใช้ พนื ้ ที่ท่ ีว่างลงต่ อไปได้ ดังรู ป (e)

ปั ญหาอีกข้ อหนึ่ง จะเห็นได้ ว่า
◦ ถ้ าเรามีพนื ้ ที่ว่างขนาด 18,464 ไบต์ และกระบวนการใหม่
ต้ องการ 18,462 ไบต์ แล้ วเราจัดสรรให้ พอดี 18,462 ไบต์
ก็จะเหลือพืน้ ที่ว่าง 2 ไบต์ การเก็บข้ อมูลพืน้ ที่ว่าง 2 ไบต์ นี ้
◦ เสียค่ าใช้ จ่ายสูงกว่ าเนือ้ ที่ 2 ไบต์ มาก ดังนัน้ เรามักจัดสรรพืน้ ที่
ว่ างที่เหลือเล็กน้ อยนีใ้ ห้ เป็ นส่ วนหนึ่งของพืน้ ที่ท่ รี ้ องขอไปเลย

พืน้ ที่ส่วนนี ้ ก็จะสูญเปล่ าไปเช่ นกัน เราเรียกว่ า การสูญ
เปล่ าของพื้นทีย่ ่ อยภายใน (Internal
Fragmentation)
วิธีการหนึ่งที่สามารถใช้ ในการแก้ ปัญหา การสูญเสียพืน้ ที่ย่อย
ภายนอก (External Fragmentation) ได้ คือ การบีบ
อัด (Compaction)
 การบีบอัด คือการสับเปลี่ยน (โยกย้ าย) พืน้ ที่ว่างในระบบให้ มาอยู่
รวมกันเป็ นพืน้ ที่ผืนเดียวต่ อเนื่องกัน

จะเห็นว่ าพืน้ ที่ว่างเล็ก ๆ 3 ผืน คือ 100K 300K และ
260K ได้ ถูกย้ ายมารวมให้ เป็ นพืน้ ที่ผืนเดียวที่มีขนาด 660K
 การบีบอัดหน่ วยความจาของระบบไม่ อาจทาได้ กับทุกระบบ
 สังเกตจากรู ปข้ างบน ที่มีการเคลื่อนย้ ายกระบวนการ P4 และ
P3 กระบวนการทัง้ 2 ต้ องสามารถทางานต่ อได้ เมื่อเข้ ามาอยู่ใน
พืน้ ที่ใหม่ โดยตาแหน่ งอ้ างอิงภายในทัง้ หมดจะต้ องถูกปรั บปรุ ง

สิ่งที่เราจะต้ องพิจารณาต่ อมาคือ ค่ าใช้ จ่ายที่จะเกิดขึน้
 ขัน
้ ตอนวิธีในการบีบอัดหน่ วยความจาหลัก ที่ง่ายที่สุ ด คือ จัดการ
เคลื่อนย้ ายกระบวนการทัง้ หมดในระบบให้ ไปอยู่สุดขอบใดขอบ
หนึ่ง (ไปทางเดียวกันทัง้ หมด) ของหน่ วยความจาหลัก ซึ่งจะเป็ น
ผลให้ เกิดพืน้ ที่ว่างขนาดใหญ่ (เกิดจากพืน้ ที่ว่างย่ อย ๆ รวมกัน)
 วิธีการบีบอัดหน่ วยความจาดังกล่ าวนีม
้ ีค่าใช้ จ่ายสูง

พบว่ าถ้ าเราทาการบีบอั ดหน่ วยความจา ตามขั น้ ตอนวิธีอย่ างง่ าย
ดังกล่ าวข้ างต้ น
◦ เราต้ องเคลื่อนย้ ายทัง้ กระบวนการ P3 และ P4 ซึ่งมีขนาด
โดยรวมเท่ ากับ 600K (200K + 400K)
 แต่ ในสถานการณ์ นี ้ เราอาจจะเคลื่อนย้ ายเพียงกระบวนการ P4 ไป
ไว้ บนกระบวนการ P3
◦ เป็ นการย้ ายพืน้ ที่ขนาด 400K
 หรื ออาจจะเคลื่อนย้ ายกระบวนการ P3 มาไว้ ใต้ กระบวนการ P4
◦ เป็ นการย้ ายพืน้ ที่ขนาดเพียง 200K
 หรื อมองกระบวนการที่เข้ ามาใหม่ ว่าขนาดเท่ าไหร่
◦ พืน้ ที่ว่างไม่ เป็ นผืนเดียวกันแต่ ตอบสนองเร็ว

หน่ วยความจาทางกายภาพจะถูกแบ่ งเป็ นส่ วน ๆ แต่ ละส่ วนมี
ขนาดเท่ า ๆ กัน เรียกว่ า หน้ า(Frame) หรือ หน้ าจริง
 หน่ วยความจาทางตรรกะของโปรแกรม ก็จะถูกแบ่ งเป็ นส่ วน ๆ
เช่ นกัน โดยมีขนาดเท่ ากับส่ วนของหน่ วยความจาจริง เรี ยกว่ า
หน้ า (Page)
 เมื่อต้ องการให้ กระบวนการหนึ่งทางาน ก็เพียงแต่ นา
กระบวนการนัน้ จากที่พักโปรแกรมชั่วคราวบรรจุลงใน
frame ของหน่ วยความจา โดยแยกเป็ นหน้ าไม่ ต้อง
ต่ อเนื่องกัน ที่พักโปรแกรมชั่วคราวก็จะถูกแบ่ งเป็ นส่ วน ๆ
เช่ นกัน

ตาแหน่ งทางตรรกะที่กระบวนการใช้ จะถูกแบ่ งเป็ น 2 ส่ วน
◦ หมายเลขหน้ า (Page number): p
 ใช้ เป็ นตัวชีไ้ ปยังตารางเลขหน้ า (Page table)
◦ ระยะจากขอบหน้ า (Page-offset): d
 ตารางเลขหน้ าจะมีค่าตาแหน่ งจุดเริ่ มต้ น (Base Address) : f
ของหน้ าจริงในหน่ วยความจาหลัก
 ค่ าจุดเริ่ มต้ นหน้ าจริ งนีร้ วมกับค่ าระยะจากขอบหน้ า (f + d) จะเป็ น
ตาแหน่ งจริงในหน่ วยความจาหลัก

Paging Hardware

เพื่อความเข้ าใจ เราสมมติตัวอย่ างง่ าย ๆ โดยกาหนดให้ ขนาดของ
หน้ าเท่ ากับ 4 ไบต์





หน่ วยความจาจริงมีขนาด 32 ไบต์ (รวม 8 หน้ า)
สมมติให้ หน่ วยความจาทางตรรกะ (ในมุมมองของกระบวนการผู้ใช้ )
มี 4 หน้ า (16 ไบต์ )
ตาแหน่ ง ทางตรรกะ 0
จะแสดงค่ า หมายเลขหน้ า (Page
number) 0 และระยะจากขอบ (Page offset) 0
จากหมายเลขหน้ า 0 เทียบในตารางเลขหน้ า (Page table) จะ
เห็นว่ าตรงกับหน้ าจริง (Frame) หมายเลข 5
ดังนัน้ ตาแหน่ งทางตรรกะ 0 แปลงเป็ นตาแหน่ งจริงทางกายภาพ =
(5 x 4) + 0 = 20
◦ ตาแหน่ งทางตรรกะ 3 (หน้ า 0 ระยะห่ าง 3) แปลงเป็ นตาแหน่ ง
จริง 23 = (5 x 4) + 3
ในระบบการแบ่ งเป็ นหน้ านี ้ จะไม่ มีการสูญเปล่ าพืน้ ที่ย่อยภายนอก
เพราะเนื อ้ ที่ในหน่ วยความจาที่ยังว่ างอยู่ (แม้ จะไม่ ต่อเนื่ องกัน )
สามารถจะจัดให้ กระบวนการที่ต้องการได้ เสมอ
 แต่ อาจมีการสูญเปล่ าพืน
้ ที่ย่อยภายในได้ เพราะการจัดสรรเนือ้ ที่
จริงจัดให้ ทีละหน้ าเป็ นจานวนเต็ม ถ้ ากระบวนการต้ องการใช้ เนือ้ ที่
ไม่ เป็ นจานวนเต็มหน้ า หน้ าสุดท้ ายย่ อมเหลือเศษ

เมื่ อมี กระบวนการใหม่ เข้ ามาในระบบ ตัวจั ดตารางระยะยาวจะดู ท่ ี
ขนาดของกระบวนการ (ซึ่งบอกเป็ นจานวนหน้ า) แล้ วดูเนือ้ ที่ว่างใน
หน่ วยความจาหลักว่ ามีจานวนหน้ าว่ างพอเพียงหรื อไม่
 ถ้ ากระบวนการมีขนาด n หน้ า (Page) ตัวจัดตารางระยะยาวก็
ต้ องจัดเนือ้ ที่ว่างให้ ได้ n หน้ า (Frame) เช่ นกัน
◦ ถ้ ามีเนือ้ ที่พอ ก็จะนาส่ วนของกระบวนการหน้ าแรกลงในเนื อ้ ที่ว่าง
ที่ แรก และใส่ หมายเลขหน้ าจริ ง ลงในตารางเลขหน้ าของ
กระบวนการนี ้
◦ จากนัน้ ก็นาหน้ าที่สองลง และใส่ หมายเลขหน้ าจริงลงในตารางเลข
หน้ าเช่ นกัน ทาเช่ นนีไ้ ปเรื่ อย ๆ จนครบ n หน้ า

Free Frames
Before allocation
After allocation
วิธีพนื ้ ฐาน (Basic Method)
 การแบ่ งเป็ นตอน (Segmentation) เป็ นการจัดการหน่ วยความจา
หลักตามมุมมองของผู้ใช้
 หน่ วยความจาทางตรรกะจะถูกแบ่ งเป็ นตอน ๆ แต่ ละตอนจะมีช่ ือและขนาด
ตาแหน่ งอ้ างอิง ก็จะมีช่ ือตอนกับระยะห่ างจากขอบ (offset)
 ชื่อตอนมักใช้ ตัวเลขแทนเรี ยกว่ า เลขตอน (segment-number)
 โดยปกติตัวแปลภาษา assembly หรื อตัวแปลภาษาชัน
้ สูงอื่น ๆ จะแบ่ ง
โปรแกรมเป็ นตอน ๆ โดยอัตโนมัติ
ตัวแปลภาษาปาสคาล อาจแบ่ งตอนเป็ น
 ตอนที่ 1
เก็บตัวแปรร่ วม (Global variables)
 ตอนที่ 2
เนือ้ ที่สาหรั บการเรี ยกโปรแกรมย่ อย เพื่อใช้
เก็บค่ าตัวแปรต่ าง ๆ และตาแหน่ งในการเรี ยกกลับ
 ตอนที่ 3
เก็บคาสั่งของโปรแกรมย่ อยต่ าง ๆ
 ตอนที่ 4
เก็บตัวแปรภายใน (Local variables)
สาหรั บโปรแกรมย่ อย
ฮาร์ ดแวร์ (Hardware)
 แม้ ว่าผู้ใช้ สามารถอ้ างอิงส่ วนต่ าง ๆ ของโปรแกรมโดยใช้ ตาแหน่ ง
แบบ 2 มิติ แต่ หน่ วยความจาจริ งยังคงเป็ นแบบมิตเิ ดียว คื อเป็ น
แถวของคาเรี ยงต่ อกันไป
 ต้ องมีวิธีการจับคู่ตาแหน่ งทางตรรกะแบบสองมิติ ให้ เป็ นตาแหน่ ง
จริงมิตเิ ดียว โดยใช้ ตารางเลขตอน (segment table)
ตาแหน่ งทางตรรกะที่กระบวนการใช้ จะถูกแบ่ งเป็ น 2 ส่ วน
◦ หมายเลขตอน (segment number: s)
 เป็ นตัวชีไ้ ปยังข้ อมูลในตารางเลขตอน
◦ ระยะจากขอบ (offset: d)
 มีค่าตัง้ แต่ 0 ถึงขอบเขตของตอน
 ข้ อมูลในตารางเลขตอน
◦ ฐาน (base)
◦ ขอบเขต (limit)
 ระยะจากขอบรวมกับฐาน (d+base) จะเป็ นตาแหน่ งจริ งใน
หน่ วยความจาหลัก


ตัวอย่ างมี 5 ตอน แต่ ละตอนเก็บอยู่ในหน่ วยความจาทางกายภาพ
ตารางเลขตอนจะมีค่าฐานและขอบเขตของแต่ ละตอน เช่ น
 ตอนที่ 2 มีค่าฐานหรื อตาแหน่ งเริ่ มต้ นที่ 4300 และค่ าขอบเขต 400
ไบต์
 ดังนัน
้ การอ้ างอิงไบต์ ท่ ี 53 ของตอนที่ 2 จะเป็ นค่ าตาแหน่ งจริง

◦ 4300 + 53 = 4353
 ตาแหน่ งทางตรรกะของตอนที่ 3 ไบต์ ท่ ี 852 เท่ ากับตาแหน่ งจริ ง
◦ 3200 + 852 = 4052
 การอ้ างอิงตาแหน่ งไบต์ ท่ ี 1222 ของตอนที่ 0 จะทาให้ เกิดข้ อผิดพลาด
รายงานไปยังระบบปฏิบัตกิ าร
◦ เพราะค่ า 1222 เกินกว่ าค่ าขอบเขต (> 1000 ไบต์ ของตอนที่ 0)
ข้ อดีหลักของการแบ่ งเป็ นตอน
 สามารถผนวกการป้องกั น ไปกั บแต่ ละตอนได้ เพราะแต่ ละตอนคื อส่ วน
ต่ าง ๆ ของโปรแกรมที่มีลักษณะต่ าง ๆ กัน ข้ อมูลในตอนเดียวกันมักจะมี
การใช้ งานเหมือน ๆ กัน เช่ น ตอนของโปรแกรม ตอนของข้ อมูล เป็ นต้ น
ในระบบทั่วไป เราอาจกาหนดตอนของโปรแกรมหรื อคาสั่งให้ เป็ นแบบ
อ่ านได้ เท่ านั น้ (read-only)
หรื อใช้ งานเท่ านั น้ (executeonly)
 ใช้ บต
ิ ป้องกันควบคู่กับแต่ ละตอนในตารางเลขตอน เพื่อป้องกันการใช้ ผิด
ประเภท (เช่ น เขียนลงในตอนที่ใช้ อ่านได้ เท่ านัน้ หรือใช้ ทางานได้
เท่ านัน้ )
 ใส่ ข้อมูลประเภท array ไว้ ในตอนเฉพาะ ฮาร์ ดแวร์ ของระบบก็จะ
สามารถช่ วยตรวจดูได้ ว่า มีการอ้ างอิงข้ อมูลออกนอกขอบเขต array
หรื อไม่ ดังนัน้ ฮาร์ ดแวร์ อาจช่ วยตรวจจับข้ อผิดพลาดเบือ้ งต้ นต่ าง ๆ ใน
โปรแกรมได้

ข้ อดีอีกข้ อหนึ่งก็คือ สามารถใช้ ข้อมูลหรื อโปรแกรมร่ วมกัน
ได้ ส ะดวก กระบวนการแต่ ล ะตั ว จะมี ต ารางเลขตอนของ
ตนเอง (เก็ บ อยู่ ใ นตารางข้ อ มู ล เฉพาะของกระบวนการ)
กระบวนการหลายตัวอาจใช้ ตอนร่ วมกันได้ โดยให้ ตัวชี เ้ ลข
ตอนชีไ้ ปยังที่เดียวกันในหน่ วยความจาจริง
ดังนัน้ ข้ อมูลทุกชนิดที่กาหนดเป็ นตอน สามารถใช้ ร่วมกันได้ โดย
ไม่ จากัดจานวนตอนที่จะใช้ ร่วมกัน
 กระบวนการหลายตั ว จึ ง สามารถใช้ โ ปรแกรมร่ วมกั น ได้ อ ย่ า ง
สะดวก เช่ น การใช้ โปรแกรม text editor ในระบบปั นส่ วน
(time-sharing) ซึ่งมีผ้ ูใช้ หลายคนกาลังใช้ โปรแกรมนีอ้ ยู่
 โปรแกรมนีอ้ าจประกอบด้ วยหลาย ๆ ตอนซึ่งสามารถใช้ ร่วมกั น
ได้ โดยผู้ใช้ แต่ ละคนใช้ text editor ร่ วมกัน แต่ มีตอน
สาหรั บเก็บข้ อมูลภายในแยกกัน
 ท าให้ ค วามต้ อ งการเนื อ
้ ที่ ห น่ ว ยความจ าจริ ง โดยรวมลดลงได้
อย่ างมาก

การแบ่ งเป็ นตอนมั ก ท าให้ เ กิ ด การสู ญ เปล่ าพื น้ ที่ ย่ อ ย
ภายนอก ซึ่งเกิดจากพืน้ ที่ว่างอยู่กระจัดกระจายกัน และ
แต่ ละพืน้ ที่มีขนาดเล็กไป สาหรับกระบวนการหนึ่ง ๆ
 กระบวนการอาจรอจนมีพืน
้ ที่ว่างพอหรื อระบบอาจบีบ อัด
หน่ วยความจ าเพื่ อ ให้ เ กิ ด พื น้ ที่ ว่ า งต่ อ เนื่ อ งขนาดใหญ่
พอเพียง

Download