虚拟内存、分页和分段
| English | ไทย |
|---|---|
| pages/ˈpeɪdʒɪz/ | หน้า |
| paging/ˈpeɪdʒɪŋ/ | Paging |
| segmentation/ˌseɡmənˈteɪʃn/ | การแบ่งส่วน |
| virtual address space/ˈvɜːtʃuːəl əˈdres speɪs/ | พื้นที่ที่อยู่ ảo |
| frames/freɪmz/ | กรอบ |
| page table/peɪdʒ ˈteɪbl/ | ตารางหน้า |
| page fault/peɪdʒ fɒlt/ | ความผิดพลาดของหน้า |
| swap file/swɒp faɪl/ | ไฟล์สวอป |
| thrashing/ˈθræʃɪŋ/ | การกระวนกระวาย |
ไฟดิสก์ที่หมายถึงเครื่องยอมแพ้
- เปิดแอปพลิเคชันมากเกินไปในเครื่องที่มีหน่วยความจำไม่เพียงพอ จะเกิดเหตุการณ์เฉพาะตัวขึ้น Everything ช้าลงจนเกือบหยุดนิ่ง และไฟแสดงสถานะดิสก์จะดับการกระพริบและติด เปิด
- โปรเซสเซอร์ไม่ได้ทำงานหนัก มันกำลังรออยู่ เพราะหน่วยความจำที่แต่ละโปรแกรมต้องการอยู่บนดิสก์ และการดึงหน้าหนึ่งออกอาจทำให้หน้าอื่นที่ต้องใช้ทันทีถูกทิ้งไป
- เครื่องกำลังทำอะไรเลยนอกจากการย้ายหน้า มีงานพอและมีความจำพอที่จะทำทั้งสองอย่างแต่ก็ทำไม่ได้เลย
- บทเรียนนี้คือ หน่วยความจำเสมือน (virtual memory), วิธีที่ การแบ่งหน้า (paging) และ การแบ่งส่วน (segmentation) สร้างมันขึ้นมา,以及如何使内存看起来更大但也能让机器无法使用。
พื้นที่ที่อยู่แบบเสมือน
- แต่ละโปรเซสส์ได้รับ พื้นที่ที่อยู่แบบเสมือน (virtual address space) ของตัวเอง: ช่วงที่อยู่ต่อเนื่องกันที่สะอาด เริ่มจากศูนย์ ซึ่งระบบปฏิบัติการจะแมปไปยังตำแหน่งจริงของข้อมูล
- มีสามสิ่งเกิดขึ้นตามไป Each process เห็น simple private space และไม่ต้องรู้ว่ามีการรันอะไรอยู่ Processes ถูก ป้องกันจากกันและกัน เพราะไม่สามารถระบุที่อยู่ความจำในอีก space หนึ่งได้ และปริมาณความจำที่ใช้รวมกันสามารถ เกินกว่า physical RAM ได้ เนื่องจากส่วนหนึ่ง resides อยู่บนดิสก์
- การแยกนี้既是安全边界也是便利功能。
虚拟内存的一个好处是它:
虚拟内存为每个进程提供私有空间,并利用磁盘使工作集超过安装的 RAM。
为每个进程提供虚拟地址空间实现了什么?选择 所有 适用项。
虚拟内存带来了简单性、隔离性和容量,但代价是速度,因为部分内存实际上位于磁盘上。
การแบ่งหน้า (Paging)
- พื้นที่เสมือนถูกแบ่งเป็น หน้า (pages) ขนาดคงที่; หน่วยความจำฟิสิกซ์ถูกแบ่งเป็น เฟรม (frames) ขนาดเดียวกัน A page table บันทึกว่าแต่ละหน้าปัจจุบันอยู่ที่เฟรมใด
- เมื่อโปรเซสส์ใช้อ้างอิง地址,hardware looks up the page in the table and finds the frame. If the page is not in RAM, that is a page fault。
- เมื่อเกิด page fault OS จะอ่านหน้าจาก swap file บนดิสก์เข้าสู่เฟรมว่าง หากไม่มีเฟรมว่าง ต้อง evict หน้าหนึ่งออกก่อน แล้วเขียนกลับลงดิสก์หากมีการแก้ไข

หน้าและเฟรมขนาดเท่ากัน เชื่อมต่อกันโดยตาราง
在分页中,内存被划分为:
Paging ใช้หน้าและเฟรมที่มีขนาดคงที่ เชื่อมต่อกันโดยตารางหน้า (ขนาดแปรผันคือ Segmentation)
Page fault เกิดขึ้นเมื่อ:
หน้าที่เข้าถึงไม่อยู่ในเฟรม ดังนั้น OS จะดึงมาจากไฟล์สลับ (หากจำเป็นจะไล่ออกจากเฟรมอื่น)
ตัวอย่างปฏิบัติ: เกิดอะไรขึ้นเมื่อเกิด page fault
- A process accesses an address whose page is not in RAM. Describe what the OS does. [4]
- Hardware detects that the page is not present and raises a page fault interrupt, and the process is blocked。
- OS finds a free frame; if there is none, it selects a page to replace, and writes it back to the swap file if it has been modified.
- It reads the required page from the swap file into that frame and updates the page table。
- Process จะถูกส่งกลับไปยังสถานะ ready และคำสั่งจะถูกทำซ้ำใหม่ สี่ขั้นตอน สี่คะแนน และให้สังเกตว่า process ถูก block ตลอดช่วงนั้น
发生缺页时发生了什么
逐步分析缺页过程。当程序访问不在 RAM 中的页面时,OS 会静默地从磁盘获取该页面并更新页表——使程序看起来比实际物理内存更大。
เรียงลำดับการตอบสนองของ OS ต่อ page fault
ตรวจจับและบล็อก, ทำพื้นที่ให้, โหลด, บันทึก, ทบทวน Page fault เป็นกลไกปกติ ไม่ใช่ข้อผิดพลาด
การกระเจิง (Thrashing)
- การเลือกหน้าที่จะแทนที่ Matters, เพราะการเลือกผิดหมายความว่าหน้านั้นจะถูกต้องการอีกครั้งทันที
- เมื่อมี RAM น้อยเกินไปสำหรับ working set ของโปรเซสส์ที่กำลังทำงาน Almost every access causes a page fault, and every fault evicts a page that is wanted again at once.
- ระบบจะใช้เวลาเกือบทั้งหมดในการ swapping pages แทนที่จะ execute instructions นั่นคือ thrashing หรือ disk thrashing และเป็นสภาวะที่อธิบายไว้ด้านบนของบทเรียนนี้
- วิธีแก้คือเพิ่ม RAM หรือลดจำนวน processes; processor ที่เร็วขึ้นไม่ได้ช่วยเลย เพราะ processor ไม่ใช่สิ่งที่กำลังทำงานหนัก
เครื่องช้าเกือบหยุดนิ่งและดิสก์ทำงานตลอดเวลา สิ่งใดจะแก้ไขปัญหานี้ได้?
นี่คือ Thrashing: การเข้าถึงแทบทุกครั้งเกิด faults และโปรเซสเซอร์รอคอย โปรเซสเซอร์ไม่ใช่ส่วนที่ทำให้ระบบยุ่งยาก ดังนั้นการทำให้มันเร็วขึ้นจึงไม่ได้ผล
การแบ่งส่วน (Segmentation)
- Segmentation แบ่งหน่วยความจำออกเป็น logical segments ขนาดแปรผันที่ตรงกับโครงสร้างของโปรแกรมเอง: code, stack, heap, หรือ data array ขนาดใหญ่
- เนื่องจาก segment เป็น logical unit สามารถมี permissions ของตัวเองได้: code segment อาจเป็น read-only และ executable, stack เป็น read-write และไม่ executable
- ความแตกต่างที่ข้อสอบต้องการ: pages มีขนาดคงที่และไม่มีความหมายต่อโปรแกรม; segments มีขนาดแปรผันและสอดคล้องกับส่วนทางลอจิกของโปรแกรม ระบบจริงหลายระบบผสมทั้งสองอย่างเข้าด้วยกัน โดยใช้ paging ภายในsegments

Segments คือส่วนของโปรแกรมเอง ไม่ใช่切片เท่าๆ กัน
จับคู่แต่ละพจน์การจัดการหน่วยความจำกับความหมาย
Paging = หน้าขนาดคงที่; Segmentation = หน่วยตรรกะขนาดแปรผัน; Page fault กระตุ้นการสลับ; faults มากเกินไป = Thrashing
Segmentation แบ่งหน่วยความจำเป็นหน่วยตรรกะขนาดแปรผัน (โค้ด, ส택, เฮป) ซึ่งแต่ละส่วนมีสิทธิ์ของตนเอง ในขณะที่ Paging ใช้หน้าขนาดคงที่
Segments ตรงกับโครงสร้างตรรกะของโปรแกรม; หน้าเป็นบล็อกขนาดคงที่สม่ำเสมอ — บางระบบรวมทั้งสองอย่างเข้าด้วยกัน
ต่างจากหน้าซึ่งมีขนาดเท่ากันทั้งหมด Segments มีขนาด ____ และตรงกับส่วนต่างๆ ของโปรแกรม
Segment คือโค้ด ส택 หรือเฮป จึงสามารถกำหนดสิทธิ์ของตัวเองได้ ส่วนหน้าเป็นการแบ่งทางกายภาพที่ไม่มีนัยยะต่อโปรแกรม
ตัวอย่างปฏิบัติ: paging เทียบกับ segmentation
- State two differences between paging and segmentation. [2]
- Pages ทั้งหมดมี fixed size ซึ่งกำหนดโดยระบบ; segments มี variable size ซึ่งกำหนดโดยส่วนทางลอจิกของโปรแกรม
- Page เป็นการแบ่งแบบ physical ล้วนๆ ที่ไม่มีความหมายต่อโปรแกรม; segment สอดคล้องกับหน่วยทางลอจิก เช่น code หรือ stack และสามารถกำหนด access permissions ของมันเองได้
- ถ้าจำเป็นมีอีกข้อหนึ่ง: paging อาจเหลือพื้นที่ว่างภายในหน้าสุดท้ายของการจัดสรร ในขณะที่ segmentation ทำให้เกิดช่องว่างของพื้นที่ที่ไม่สามารถใช้ได้ ระหว่าง segments
คะแนนที่หลุดหายไป
- Virtual memory ไม่ได้สร้างหน่วยความจำขึ้นมา มันช่วยให้ total in use เกินกว่า physical RAM ได้โดยการเก็บส่วนหนึ่งของไว้บนดิสก์ โดยมีค่าใช้จ่ายคือการเข้าถึงดิสก์
- page fault ไม่ใช่ข้อผิดพลาด มันเป็นกลไกปกติในการนำหน้าเข้ามา
- Thrashing คือการใช้เวลามากกว่าในการ swap มากกว่า execute และการแก้ไขคือ เพิ่ม RAM หรือลดจำนวน processes ไม่เคยใช้ processor ที่เร็วขึ้น
- Fixed size เทียบกับ variable size, logically meaningful คือความแตกต่างระหว่าง paging และ segmentation บอกทั้งสองครึ่ง
คุณเข้าใจแล้ว
- A virtual address space gives each process a private contiguous range, protects processes from each other, and lets memory in use exceed physical RAM
- Paging: fixed-size pages mapped to frames by a page table; a page fault blocks the process while the OS evicts a page if necessary, loads from the swap file, updates the table and retries
- Thrashing is more time spent swapping than executing; cure it with more RAM or fewer processes
- การแบ่งส่วน ใช้ ส่วนที่มีขนาดแปรผัน ที่ตรงกับส่วนทางตรรกะของโปรแกรม แต่ละส่วนมีสิทธิ์การใช้งานของตัวเอง; ระบบจำนวนมากมีการจัดหน้าภายในส่วน