虚拟内存、分页和分段
แนะนำใหม่| English | ความหมาย |
|---|---|
| pages/ˈpeɪdʒɪz/ | หน้า |
| paging/ˈpeɪdʒɪŋ/ | การแบ่งหน้า |
| segmentation/ˌseɡmənˈteɪʃn/ | การแบ่งส่วน |
| virtual address space/ˈvɜːtʃuːəl əˈdres speɪs/ | พื้นที่ที่อยู่ทางเสมือน |
| 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 อยู่บนดิสก์
- การแยกนี้既是安全边界也是便利功能。
虚拟内存的一个好处是它:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
虚拟内存为每个进程提供私有空间,并利用磁盘使工作集超过安装的 RAM。
为每个进程提供虚拟地址空间实现了什么?选择 所有 适用项。
Difficulty 2/5 · 140 coins + a small bonus on first completion today
虚拟内存带来了简单性、隔离性和容量,但代价是速度,因为部分内存实际上位于磁盘上。
การแบ่งหน้า (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 หน้าหนึ่งออกก่อน แล้วเขียนกลับลงดิสก์หากมีการแก้ไข

หน้าและเฟรมขนาดเท่ากัน เชื่อมต่อกันโดยตาราง
在分页中,内存被划分为:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Paging ใช้หน้าและเฟรมที่มีขนาดคงที่ เชื่อมต่อกันโดยตารางหน้า (ขนาดแปรผันคือ Segmentation)
Page fault เกิดขึ้นเมื่อ:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
หน้าที่เข้าถึงไม่อยู่ในเฟรม ดังนั้น OS จะดึงมาจากไฟล์สลับ (หากจำเป็นจะไล่ออกจากเฟรมอื่น)
ตัวอย่างปฏิบัติ: เกิดอะไรขึ้นเมื่อเกิด page fault
- กระบวนการเข้าถึงที่อยู่ที่มีหน้าไม่อยู่ใน RAM อธิบายว่าระบบปฏิบัติการทำอะไร [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
Difficulty 3/5 · 200 coins + a small bonus on first completion today
ตรวจจับและบล็อก, ทำพื้นที่ให้, โหลด, บันทึก, ทบทวน 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 ไม่ใช่สิ่งที่กำลังทำงานหนัก
เครื่องช้าเกือบหยุดนิ่งและดิสก์ทำงานตลอดเวลา สิ่งใดจะแก้ไขปัญหานี้ได้?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
นี่คือ 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 คือส่วนของโปรแกรมเอง ไม่ใช่切片เท่าๆ กัน
จับคู่แต่ละพจน์การจัดการหน่วยความจำกับความหมาย
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Paging = หน้าขนาดคงที่; Segmentation = หน่วยตรรกะขนาดแปรผัน; Page fault กระตุ้นการสลับ; faults มากเกินไป = Thrashing
Segmentation แบ่งหน่วยความจำเป็นหน่วยตรรกะขนาดแปรผัน (โค้ด, ส택, เฮป) ซึ่งแต่ละส่วนมีสิทธิ์ของตนเอง ในขณะที่ Paging ใช้หน้าขนาดคงที่
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Segments ตรงกับโครงสร้างตรรกะของโปรแกรม; หน้าเป็นบล็อกขนาดคงที่สม่ำเสมอ — บางระบบรวมทั้งสองอย่างเข้าด้วยกัน
ต่างจากหน้าซึ่งมีขนาดเท่ากันทั้งหมด Segments มีขนาด ____ และตรงกับส่วนต่างๆ ของโปรแกรม
Difficulty 1/5 · 100 coins + a small bonus on first completion today
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
- การแบ่งส่วน ใช้ ส่วนที่มีขนาดแปรผัน ที่ตรงกับส่วนทางตรรกะของโปรแกรม แต่ละส่วนมีสิทธิ์การใช้งานของตัวเอง; ระบบจำนวนมากมีการจัดหน้าภายในส่วน