การจัดการหน่วยความจำหลัก
Download
Report
Transcript การจัดการหน่วยความจำหลัก
การจัดการหน่ วยความจาหลัก
(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 K
่
แต่ถา
้ เรามีเพียง 150 K (ทีเหลื
อจากส่วนของ
ระบบปฏิบต
ั ก
ิ าร) ก็จะทางานไม่ได้ เราจึงต้องใช้
วิธแ
ี บ่งส่วน (overlays)
◦ กาหนดส่วนแรก (A)
ประกอบด้วย ตาราง
สัญ ลัก ษณ์ โปรแกรมย่ อ ยร่ว ม และส่ ว นการ
แปลรอบที่ 1
่
◦ ส่วนทีสอง
(B) ประกอบด้วย ตารางสัญลักษณ์
โปรแกรมย่อยร่วมและส่วนการแปลรอบที่ 2
่ าลังทางานต้องอยู ่ใน
กระบวนการทีก
หน่ วยความจาหลักเสมอ แต่อาจถูกย้ายไปอยู ่ใน
่ั
หน่ วยเก็บโปรแกรมชวคราว
(Backing Store)
่ างานต่อ
ได้ แล้วนากลับมาใหม่เพือท
่
ในระบบการทางานแบบหลายโปรแกรมทีใช้
การจัดตารางการทางานแบบวนรอบ(roundrobin)
่ วนแบ่งเวลา (Time Quantum) สินสุ
้ ด
◦ เมือส่
ตัวจัดการหน่ วยความจาจะย้ายกระบวนการ
ปั จจุบน
ั ออกไปและเอากระบวนการใหม่เข้ามา
ทางานแทน
ขณะเดียวกัน ตัวจัดตารางการทางานของหน่ วย
ประมวลผลกลาง ก็จะจัดเวลาให้กระบวนการใหม่ได้
่
ทางานบ้าง จะเห็นว่ามีการสับเปลียนก
น
ั ระหว่าง
◦ กระบวนการเก่าและกระบวนการใหม่
◦ จากหน่ วยความจาหลักสู ห
่ น่ วยเก็บโปรแกรม
่ั
ชวคราว
่
่
การสับเปลียนงาน
อาจเกิดในระบบทีใช้
ความสาคัญเป็ นเกณฑ ์ ในการจัดตารางการ
ทางาน (Priority based)
่ งานทีมี
่ ความสาคัญสู งเข้ามาในระบบ ตัว
◦ เมือมี
่
่
จัดการหน่ วยความจาอาจสับเปลียนให้
งานทีมี
่
่ั
ความสาคัญตาออกไปพั
กชวคราว
่
ในการสับเปลียนงาน
ต้องแน่ ใจว่ากระบวนการ
่
ไม่ได้มอ
ี ะไรติดค้างอยู ่ โดยเฉพาะอย่างยิงการ
รอคอยอุปกรณ์ร ับส่งข้อมู ล
◦ ถ้ากระบวนการหนึ่ งต้องรออุปกรณ์ร ับส่ง
่
้
ข้อมู ล อาจต้องการสับเปลียนกระบวนการนี
่ั
ออกไป คอยในหน่ วยเก็บโปรแกรมชวคราว
◦ ขณะเดียวกันอุปกรณ์ร ับส่งข้อมู ลอาจต้องใช้
่ กข้อมู ลในเนื อที
้ ของกระบวนการผู
่
่
ทีพั
ใ้ ช้เพือ
ร ับส่งข้อมู ลให้แก่ผูใ้ ช้
่
◦ ถ้ากระบวนการเดิมถู กสับเปลียนออกไปและมี
่ ปกรณ์ร ับส่ง
กระบวนการใหม่เข้ามาแทนทีอุ
ข้อมู ลอาจส่งข้อมู ลไปผิดกระบวนการได้
้
ปั ญหานี อาจแก้
ไขได้ 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
่ ่
◦ มีโปรแกรมของระบบใช้พนที
ื ้ อยู
K
่
◦ ส่วนว่างทีเหลื
อสาหร ับผู ใ้ ช้
K
400
2160
สมมติให ้ในแถวคอยข ้อมูลเข ้า (input queue) มี
กระบวนการดังรูป
ระบบใช้วธ
ิ จ
ี ด
ั ตารางการทางานระยะยาวแบบมา
ก่อน-ได้กอ
่ น
้ ให้
่ แก่ กระบวนการ P1 ,
◦ สามารถจัดสรรพืนที
P2 และ P3 ได้ทน
ั ที
◦ ดังภาพของหน่ วยความจาในรู ป (a) จะเห็นว่า
่ เพียงพอกกับ
มีพนที
ื ้ ว่่ างขนาด 260 K ซึงไม่
่
ขนาดของกระบวนการ P4 ทีรออยู
่ใน
แถวคอยขาเข้า
ระบบใช้วธ
ิ จ
ี ด
ั ตารางการทางานแบบวนรอบ(roundrobin) โดยส่วนแบ่งเวลามีคา
่ เท่ากับ 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
ในระบบการแบ่งเป็ นหน้านี ้ จะไม่มก
ี ารสู ญเปล่า
พื ้ น ที่ ย่ อ ย ภ า ย น อ ก เ พ ร า ะ เ นื ้ อ ที่ ใ น
่ งว่างอยู ่ (แม้จะไม่ต่อเนื่ องกน
หน่ วยความจาทียั
ั )
่ องการได้เสมอ
สามารถจะจัดให้กระบวนการทีต้
้ ย่
่ อยภายในได้ เพราะ
แต่อาจมีการสู ญเปล่าพืนที
่ งจัดให้ทล
การจัดสรรเนื ้อทีจริ
ี ะหน้ าเป็ นจานวน
เต็ ม ถ้า กระบวนการต้อ งการใช้เ นื ้ อที่ไม่ เ ป็ น
จานวนเต็มหน้า หน้าสุดท้ายย่อมเหลือเศษ
่ กระบวนการใหม่เข้ามาในระบบ ตัวจัดตาราง
เมือมี
่
ระยะยาวจะดู ท ี่ขนาดของกระบวนการ (ซึงบอก
เป็ นจ านวนหน้ า )
แล้ว ดู เนื ้ อที่ว่ า งใน
หน่ วยความจาหลักว่ามีจานวนหน้าว่างพอเพี ยง
หรือไม่
ถ้ากระบวนการมีขนาด n หน้า (Page) ตัวจัด
่ างให้ได้ n หน้า
ตารางระยะยาวก็ตอ
้ งจัดเนื ้อทีว่
(Frame) เช่นกัน
่
◦ ถ้ามีเนื ้อทีพอ
ก็จะนาส่วนของกระบวนการหน้า
่ างทีแรก
่
แรกลงในเนื ้อทีว่
และใส่หมายเลขหน้า
จริง ลงในตารางเลขหน้าของกระบวนการนี ้
้ นาหน้าทีสองลง
่
◦ จากนันก็
และใส่หมายเลขหน้า
Free Frames
Before allocation
After allocation
วิธพ
ี นฐาน
ื้
(Basic Method)
การแบ่งเป็ นตอน (Segmentation) เป็ นการจัดการ
หน่ วยความจาหลักตามมุมมองของผู ใ้ ช้
หน่ วยความจาทางตรรกะจะถู กแบ่งเป็ นตอน ๆ แต่ละ
ตอนจะมีชอและขนาด
ื่
ตาแหน่ งอ้างอิง ก็จะมีชอตอน
ื่
ก ับระยะห่างจากขอบ (offset)
่
ชือตอนมั
กใช้ตวั เลขแทนเรียกว่า เลขตอน (segmentnumber)
โดยปกติตว
ั แปลภาษา 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 ตอน แต่ละตอนเก็บอยู ่ใน
หน่ วยความจาทางกายภาพ
ตารางเลขตอนจะมีค่ า ฐานและขอบเขตของแต่ ล ะ
ตอน เช่น
่ นที่ 4300 และ
ตอนที่ 2 มีค่าฐานหรือตาแหน่ งเริมต้
ค่าขอบเขต 400 ไบต ์
้
ดังนันการอ้
างอิงไบต ์ที่ 53 ของตอนที่ 2 จะเป็ นค่า
ตาแหน่ งจริง
◦ 4300 + 53 = 4353
ตาแหน่ งทางตรรกะของตอนที่ 3 ไบต ์ที่ 852 เท่ากบ
ั
ตาแหน่ งจริง
◦ 3200 + 852 = 4052
การอ้างอิงตาแหน่ งไบต ์ที่ 1222 ของตอนที่ 0 จะทา
ข้อดีหลักของการแบ่งเป็ นตอน
สามารถผนวกการป้ องกน
ั ไปกับแต่ละตอนได้ เพราะ
่ ลก
แต่ ล ะตอนคือ ส่ ว นต่ า ง ๆ ของโปรแกรมทีมี
ั ษณะ
ต่าง ๆ กัน ข้อมู ลในตอนเดียวกันมักจะมีการใช้งาน
เหมื อ น ๆ กัน เช่ น ตอนของโปรแกรม ตอนของ
่
ข้อ มู ล เป็ นต้น ในระบบทัวไป
เราอาจก าหนดตอน
่
ของโปรแกรมหรือ ค าสังให้
เ ป็ นแบบอ่ า นได้เ ท่ า นั้ น
้ (execute-only)
(read-only) หรือใช้งานเท่านัน
ใช้บต
ิ ป้ องกันควบคู ก
่ บ
ั แต่ละตอนในตารางเลขตอน
่ องก ันการใช้ผด
เพือป้
ิ ประเภท (เช่น เขียนลงในตอน
่ อา
้ หรือใช้ทางานได้เท่านัน)
้
ทีใช้
่ นได้เท่านัน
ใส่ขอ
้ มู ลประเภท array ไว้ในตอนเฉพาะ ฮาร ์ดแวร ์
ของระบบก็จะสามารถช่วยตรวจดูได้วา
่ มีการอ้างอิง
้
ข้อดีอก
ี ข้อหนึ่ งก็คอ
ื สามารถใช้ขอ
้ มู ลหรือ
โปรแกรมร่วมกันได้สะดวก กระบวนการแต่
ละตัว จะมีต ารางเลขตอนของตนเอง (เก็ บ
อยู ่ในตารางข้อมู ลเฉพาะของกระบวนการ)
กระบวนการหลายตัวอาจใช้ตอนร่วมกันได้
้
้
โดยให้ต วั ชีเลขตอนชี
ไปยั
ง ที่เดีย วกันใน
หน่ วยความจาจริง
ดั ง นั้ น ข้ อ มู ล ทุ ก ช นิ ด ที่ ก า ห น ด เ ป็ น ต อ น
สามารถใช้รว
่ มกันได้โดยไม่จากัดจานวนตอน
่
ทีจะใช้
รว่ มกัน
กระบวนการหลายตัว จึง สามารถใช้โ ปรแกรม
ร่ว มกันได้อ ย่ า งสะดวก เช่น การใช้โ ปรแกรม
text editor ในระบบปั นส่วน (time-sharing)
่ ผูใ้ ช้หลายคนกาลังใช้โปรแกรมนี อยู
้ ่
ซึงมี
่
โปรแกรมนี ้อาจประกอบด้ว ยหลาย ๆ ตอนซึง
สามารถใช้ร ่ ว มกันได้ โดยผู ใ้ ช้แ ต่ ล ะคนใช้
text editor ร่วมกัน แต่มต
ี อนสาหร ับเก็บ
ข้อมู ลภายในแยกกัน
่ วยความจ าจริง
ท าให้ค วามต้อ งการเนื ้ อทีหน่
การแบ่ ง เป็ นตอนมัก ท าให้เ กิด การสู ญ
้ ย่
่ อยภายนอก ซึงเกิ
่ ดจากพืนที
้ ่
เปล่าพืนที
้ มี
่
ว่างอยู ่กระจัดกระจายกัน และแต่ละพืนที
ขนาดเล็กไป สาหร ับกระบวนการหนึ่ง ๆ
่ างพอหรือ
กระบวนการอาจรอจนมีพนที
ื ้ ว่
่
ระบบอาจบีบอด
ั หน่ วยความจาเพือให้
เกิด
้ ว่่ างต่อเนื่องขนาดใหญ่พอเพียง
พืนที