0% found this document useful (0 votes)
42 views3 pages

OS

Tài liệu nói về các khái niệm cơ bản của hệ điều hành bao gồm cấu trúc và thành phần của hệ điều hành, quản lý tiến trình và bộ nhớ, tương tác giữa tiến trình, đa luồng và đồng thời. Nó cũng đề cập đến các mô hình thiết kế hệ điều hành khác nhau.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views3 pages

OS

Tài liệu nói về các khái niệm cơ bản của hệ điều hành bao gồm cấu trúc và thành phần của hệ điều hành, quản lý tiến trình và bộ nhớ, tương tác giữa tiến trình, đa luồng và đồng thời. Nó cũng đề cập đến các mô hình thiết kế hệ điều hành khác nhau.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

1 Introduction

• Hệ điều hành là phần mềm quản lý phần cứng máy tính, cũng như cung cấp một môi trường để các chương trình ứng dụng chạy.
• Interrupts là một cách quan trọng mà phần cứng tương tác với hệ điều hành. Một thiết bị phần cứng kích hoạt Interrupts bằng cách gửi tín hiệu
đến CPU để báo hiệu rằng một sự kiện nào đó cần được chú ý. Ngắt được quản lý bởi bộ xử lý Interrupts.
• Để máy tính thực hiện công việc của mình là thực thi các chương trình, các chương trình phải ở trong bộ nhớ chính (RAM), là khu vực lưu trữ
lớn duy nhất mà bộ xử lý có thể truy cập trực tiếp.
• Bộ nhớ chính thường là một thiết bị lưu trữ (Volatile storage, sẽ mất nội dung khi nguồn điện bị tắt hoặc mất.
• Bộ nhớ Nonvolatile storage liệu là một phần mở rộng của bộ nhớ chính và có khả năng lưu trữ lượng lớn dữ liệu vĩnh viễn.
• Thiết bị lưu trữ không dễ mất dữ liệu phổ biến nhất là đĩa cứng (Hard disk), có thể cung cấp lưu trữ cho cả chương trình và dữ liệu.
• Kiến trúc máy tính hiện đại là các Multiprocessor systems trong đó mỗi CPU chứa nhiều lõi tính toán (computing cores).
• Để sử dụng tốt nhất CPU, các hệ điều hành hiện đại áp dụng đa chương trình (multiprogramming), cho phép nhiều công việc có thể nằm trong
bộ nhớ cùng một lúc, đảm bảo rằng CPU luôn có công việc để thực hiện.
• Đa nhiệm (Multitasking) là một phần mở rộng của đa chương trình, trong đó các thuật toán lập lịch CPU chuyển đổi nhanh chóng giữa các tiến
trình, cung cấp cho người dùng thời gian phản hồi nhanh.
• Để ngăn các chương trình người dùng can thiệp vào hoạt động chính xác của hệ thống, phần cứng hệ thống có hai chế độ: chế độ người dùng (user
mode) và Kernel mode.
• Các lệnh khác nhau là đặc quyền và chỉ có thể được thực thi trong Kernel mode. Ví dụ bao gồm lệnh chuyển sang Kernel mode, kiểm soát I/O,
quản lý bộ đếm thời gian và quản lý Interrupts.
• Một tiến trình (Process) là đơn vị cơ bản của công việc trong một hệ điều hành. Quản lý tiến trình bao gồm tạo và xóa tiến trình và cung cấp
các cơ chế cho các tiến trình giao tiếp và đồng bộ với nhau.
• Hệ điều hành quản lý bộ nhớ bằng cách theo dõi các phần của bộ nhớ đang được sử dụng và bởi ai. Nó cũng chịu trách nhiệm phân bổ và giải
phóng không gian bộ nhớ.
• Không gian lưu trữ được quản lý bởi hệ điều hành; điều này bao gồm cung cấp file systems để đại diện cho tệp và thư mục và quản lý không
gian trên các mass-storage devices.
• Các cấu trúc dữ liệu được sử dụng trong hệ điều hành bao gồm list, stack, queue, tree và map.

2 Operating system structures


• Hệ điều hành cung cấp môi trường để thực thi các chương trình bằng cách cung cấp các dịch vụ cho người dùng và các chương trình.
• Ba cách chính để tương tác với hệ điều hành là (1) command interpreters, (2) graphical user interfaces, và (3) graphical user interfaces.
• Các lệnh hệ thống cung cấp một giao diện tới các dịch vụ mà hệ điều hành cung cấp. Lập trình viên sử dụng giao diện lập trình ứng dụng (API)
của lệnh hệ thống để truy cập các dịch vụ lệnh hệ thống.
• System call có thể được chia thành sáu loại chính: (1) process control, (2) file management, (3) device management, (4) device man-
agement, (5) communications, và (6) protection.
• Hệ điều hành cũng bao gồm một tập hợp các chương trình hệ thống cung cấp các tiện ích cho người dùng.
• Linker kết hợp nhiều mô-đun thành một tệp thực thi. Loader tải tệp thực thi vào bộ nhớ, nơi nó trở nên đủ điều kiện để chạy trên một CPU có
sẵn.
• Monolithic operating system không có cấu trúc; tất cả các chức năng được cung cấp trong một tệp nhị phân tĩnh duy nhất chạy trong một
không gian địa chỉ duy nhất. Mặc dù các hệ thống như vậy khó thay đổi, lợi ích chính của chúng là hiệu suất. Các dịch vụ của hệ diều hành đều
được tích hợp vào kernel

– Linux sử dụng Monolithic kernel

• Layered operating system được chia thành một số lớp riêng biệt, trong đó lớp dưới cùng là giao diện phần cứng và lớp cao nhất là giao diện
người dùng. Mặc dù các hệ thống phần mềm phân lớp đã có một số thành công, phương pháp này thường không lý tưởng để thiết kế hệ điều hành
do các vấn đề về hiệu suất.
• Phương pháp microkernel để thiết kế hệ điều hành sử dụng một kernel nhỏ gọn; hầu hết các dịch vụ chạy như các ứng dụng cấp người dùng.
Giao tiếp diễn ra thông qua message passing.
• Phương pháp modular để thiết kế hệ điều hành cung cấp các dịch vụ hệ điều hành thông qua các mô-đun có thể được tải và loại bỏ trong thời
gian chạy. Nhiều hệ điều hành đương đại được xây dựng dưới dạng các hệ thống lai, sử dụng kết hợp của nhân nguyên khối và các mô-đun.
• Boot loader tải hệ điều hành vào bộ nhớ, thực hiện khởi tạo và bắt đầu thực thi hệ thống.

3 Processes
• Process là một chương trình đang được thực thi, và trạng thái của hoạt động hiện tại của một tiến trình được biểu diễn bởi bộ đếm chương trình,
cũng như các thanh ghi khác.
• Bố cục của một tiến trình trong bộ nhớ được biểu diễn bằng bốn phần khác nhau: (1) text, (2) data, (3) heap, and (4) stack.
• Khi một tiến trình thực thi, nó thay đổi trạng thái. Có bốn trạng thái chung của một tiến trình: (1) ready, (2) running, (3) waiting, and (4)
terminated.
• Khối điều khiển (PCB) là cấu trúc dữ liệu của kernel đại diện cho một tiến trình trong hệ điều hành.
• Vai trò của Process scheduler là chọn một tiến trình có sẵn để chạy trên CPU.
• Một hệ điều hành thực hiện một Context switch khi nó chuyển từ việc thực thi một tiến trình này sang việc thực thi một tiến trình khác.
• Hai process có thể giao tiếp bằng cách trao đổi tin nhắn với nhau bằng cách sử dụng truyền thông thông qua tin nhắn. Windows cung cấp một
hình thức giao tiếp qua tin nhắn.
• Pipe cung cấp một kênh cho hai tiến trình để giao tiếp. Có hai dạng ống, Ordinary and named. ordinary pipe được thiết kế để giao tiếp giữa các
tiến trình có mối quan hệ cha con. Named pipe rộng rãi hơn và cho phép nhiều tiến trình giao tiếp.
• Hệ thống UNIX cung cấp các pipe thông thường thông qua lệnh hệ thống pipe(). Các pipe thông thường có một đầu đọc và một đầu viết. Một
process cha, ví dụ, có thể gửi dữ liệu vào pipe sử dụng đầu viết của nó và process con có thể đọc nó từ đầu đọc của nó. Ống có tên trong UNIX
được gọi là FIFOs.
• Hệ thống Windows cũng cung cấp hai dạng pipe — anonymous và named. Anonymous pipe tương tự như ordinary pipe của UNIX. Chúng là một
chiều và sử dụng mối quan hệ cha con giữa các tiến trình giao tiếp. Pipe có tên cung cấp một hình thức giao tiếp giữa các tiến trình phong phú
hơn so với đối tác UNIX, FIFOs.
• Hai dạng phổ biến của giao tiếp khách-chủ là socket và gọi thủ tục từ xa (RPC). Sockets cho phép hai tiến trình trên các máy tính khác nhau giao
tiếp qua mạng. RPC trừu tượng hóa khái niệm của cuộc gọi hàm (thủ tục) một cách sao cho một hàm có thể được gọi trên một tiến trình khác có
thể đặt trên một máy tính riêng biệt.
4 Thread & Concurency
• Thread đại diện cho đơn vị cơ bản của việc sử dụng CPU, và các luồng thuộc cùng một process chia sẻ nhiều tài nguyên của tiến trình, bao gồm
cả code và dữ liệu. (PC, stack, register)
• Có bốn lợi ích chính đối với các ứng dụng đa luồng: (1) khả năng phản hồi, (2) chia sẻ tài nguyên, (3) tính tiết kiệm và (4) khả năng
mở rộng.
• Concurrency tồn tại khi nhiều luồng đang thực hiện tiến trình, trong khi Parallelism tồn tại khi nhiều luồng đang thực hiện tiến trình cùng
một lúc. Trên hệ thống có CPU đơn, chỉ có Concurrency là khả thi, Parallelism yêu cầu hệ thống đa nhân cung cấp nhiều CPU.
• Có một số thách thức trong việc thiết kế các ứng dụng đa luồng. Chúng bao gồm việc phân chia và cân bằng khối lượng công việc, phân chia dữ
liệu giữa các luồng khác nhau và xác định bất kỳ phụ thuộc dữ liệu nào. Cuối cùng, các chương trình đa luồng đặc biệt khó kiểm thử và gỡ lỗi.
• Các ứng dụng người dùng tạo các luồng ở mức người dùng, cuối cùng phải được ánh xạ tới các luồng nhân để thực thi trên CPU. Mô hình nhiều-
sang-một ánh xạ nhiều luồng ở mức người dùng thành một luồng nhân. Các cách tiếp cận khác bao gồm mô hình một-sang-một và nhiều-sang-nhiều.

– Một thread bị block sẽ dẫn tới toàn bộncác thread khác trong cùng process bị block khi dùng many to one

• Luồng có thể bị chấm dứt bằng cách hủy bỏ không đồng bộ hoặc trì hoãn. Hủy bỏ không đồng bộ dừng một luồng ngay lập tức, ngay cả khi nó
đang thực hiện cập nhật. Hủy bỏ trì hoãn thông báo cho một luồng rằng nó nên chấm dứt nhưng cho phép luồng chấm dứt theo một cách có trật
tự. Trong hầu hết các trường hợp, hủy bỏ trì hoãn được ưu tiên hơn chấm dứt không đồng bộ.
• Không giống như nhiều hệ điều hành khác, Linux không phân biệt giữa các tiến trình và luồng; thay vào đó, nó gọi mỗi thứ là một tác vụ (task).
Lệnh gọi hệ thống clone() của Linux có thể được sử dụng để tạo các tác vụ hoạt động giống như các tiến trình hoặc giống như các luồng hơn.
5 CPU scheduling
• CPU scheduling là nhiệm vụ chọn một process đang chờ từ hàng đợi sẵn sàng và phân bổ CPU cho nó. CPU được phân bổ cho tiến trình được
chọn bởi dispatcher.
• Scheduling algorithms có thể là preemptive (có thể lấy CPU từ một tiến trình) hoặc nonpreemptive (một tiến trình phải tự nguyện từ bỏ quyền
kiểm soát CPU). Hầu hết các hệ điều hành hiện đại đều là preemptive.
• Scheduling algorithms có thể được đánh giá theo năm tiêu chí sau: (1) CPU utilization, (2) throughput, (3) turnaround time, (4)
waiting time, and (5) response time.
• First-come, first-served (FCFS) là thuật toán lập lịch đơn giản nhất, nhưng nó có thể khiến các process ngắn phải chờ đợi các process rất dài.
• Shortest-job-first (SJF) được chứng minh là tối ưu, cung cấp thời gian chờ trung bình ngắn nhất. Tuy nhiên, việc triển khai lập lịch SJF rất
khó khăn vì việc dự đoán độ dài của CPU burst tiếp theo là điều khó khăn.
• Round-robin (RR) phân bổ CPU cho mỗi tiến trình trong một khoảng time quantum. Nếu tiến trình không từ bỏ CPU trước khi time quantum
của nó hết hạn, tiến trình sẽ bị preempted trước và một tiến trình khác được lên lịch chạy trong một time quantum.
– Round robin phù hợp cho các ứng dụng nhiều tương tác (I/O)
• Priority scheduling gán cho mỗi tiến trình một mức độ ưu tiên và CPU được phân bổ cho tiến trình có mức độ ưu tiên cao nhất. Các tiến trình
có cùng mức độ ưu tiên có thể được lên lịch theo thứ tự FCFS hoặc sử dụng RR.
• Multilevel queue scheduling cấp phân vùng các tiến trình thành một số hàng đợi riêng biệt được sắp xếp theo thứ tự ưu tiên và scheduler thực
thi các tiến trình trong hàng đợi có mức độ ưu tiên cao nhất. Các scheduling algorithms khác nhau có thể được sử dụng trong mỗi hàng đợi.
• Multilevel feedback queues tương tự như hàng đợi đa cấp, ngoại trừ việc một tiến trình có thể di chuyển giữa các hàng đợi khác nhau.
• Multicore processors đặt một hoặc nhiều CPU trên cùng một chip vật lý và mỗi CPU có thể có nhiều hơn một luồng phần cứng. Theo quan
điểm của hệ điều hành, mỗi luồng phần cứng dường như là một logical CPU.
• Rate-monotonic real-time scheduling sử dụng chính sách ưu tiên tĩnh với chiếm đo trước để lên lịch các tác vụ định kỳ.
• Earliest-deadline-first (EDF) gán mức độ ưu tiên theo thời hạn. Thời hạn càng sớm thì mức độ ưu tiên càng cao; hạn càng trễ thì mức độ ưu tiên
càng thấp.
• Proportional share scheduling phân bổ T cổ phần cho tất cả các ứng dụng. Nếu một ứng dụng được phân bổ N cổ phần thời gian, thì nó được
đảm bảo có N/T tổng thời gian xử lý.
• Linux sử dụng completely fair scheduler (CFS), phân bổ một tỷ lệ thời gian xử lý CPU cho mỗi tác vụ. Tỷ lệ này dựa trên giá trị thời gian
chạy ảo (vruntime) được liên kết với mỗi tác vụ.
• Lập lịch Windows sử dụng sơ đồ ưu tiên 32 cấp độ chiếm đo trước để xác định thứ tự lập lịch luồng.
• Mô hình hóa và mô phỏng có thể được sử dụng để đánh giá thuật toán lập lịch CPU.
6 Synchronization Tools
• Race condition xảy ra khi các tiến trình truy cập đồng thời vào dữ liệu được chia sẻ và kết quả cuối cùng phụ thuộc vào thứ tự cụ thể của các
truy cập đồng thời đó. Race condition có thể dẫn đến các giá trị bị lỗi của dữ liệu được chia sẻ.
• Critical section là một đoạn code nơi dữ liệu được chia sẻ có thể bị thao tác và có thể xảy ra Race condition. Vấn đề Critical section là thiết kế
một giao thức theo đó các tiến trình có thể đồng bộ hoạt động của chúng để cùng nhau chia sẻ dữ liệu.
• Giải pháp cho vấn đề phần tới hạn phải đáp ứng ba yêu cầu sau: (1) Loại trừ lẫn nhau (mutual exclusion), (2) Tiến trình (progress) ,
and (3) Chờ đợi có giới hạn (bounded waiting). Loại trừ lẫn nhau đảm bảo rằng chỉ có một tiến trình hoạt động trong phần tới hạn của nó
tại một thời điểm. Tiến trình đảm bảo rằng các chương trình sẽ hợp tác xác định tiến trình tiếp theo sẽ vào phần tới hạn của nó. Chờ đợi có giới
hạn hạn chế thời gian một chương trình phải chờ trước khi nó có thể vào phần tới hạn của mình.
• Các giải pháp phần mềm cho vấn đề Critical section, chẳng hạn như giải pháp của Peterson, không hoạt động tốt trên các kiến trúc máy tính hiện
đại.
• Hỗ trợ phần cứng cho vấn đề Critical section bao gồm các rào bộ nhớ; các lệnh phần cứng, chẳng hạn như lệnh so sánh và trao đổi; và các atomic
variables.
• Khóa mutex cung cấp loại trừ lẫn nhau bằng cách yêu cầu một tiến trình lấy khóa trước khi vào phần tới hạn và giải phóng khóa khi thoát khỏi
phần tới hạn.
• Semaphore, giống như khóa mutex, có thể được sử dụng để cung cấp loại trừ lẫn nhau. Tuy nhiên, trong khi khóa mutex có giá trị nhị phân cho
biết khóa có sẵn hay không, thì semaphore có giá trị nguyên và do đó có thể được sử dụng để giải quyết nhiều vấn đề đồng bộ hóa khác nhau.
• Monitor là một kiểu dữ liệu trừu tượng cung cấp một hình thức đồng bộ hóa tiến trình cấp cao. Monitor sử dụng các biến điều kiện cho phép các
tiến trình chờ đợi một số điều kiện nhất định trở thành đúng và báo hiệu cho nhau khi các điều kiện đã được đặt thành đúng.

– Để đồng bộ các thread trong cùng một process, ta có thể dùng: semaphore, monitor, thuật toán bakery

• Giải pháp cho vấn đề critical-section có thể gặp phải các vấn đề về liveness, bao gồm deadlock.
• Các công cụ khác nhau có thể được sử dụng để giải quyết vấn đề critical-section cũng như đồng bộ hóa hoạt động của các tiến trình có thể được
đánh giá dưới các mức cạnh tranh khác nhau. Một số công cụ hoạt động tốt hơn dưới một số tải cạnh tranh nhất định so với các công cụ khác.
7 Synchronization Examples
• Windows sử dụng các đối tượng phân phối (dispatcher object) cũng như event để triển khai các công cụ đồng bộ tiến trình
• Linux sử dụng nhiều cách tiếp cận khác nhau để chống lại các tình trạng đua dữ liệu (race condition), bao gồm biến nguyên tử (atomic variable),
khóa spinlock và khóa mutex.
• POSIX API cung cấp khóa mutex, semaphore và biến điều kiện. POSIX cung cấp hai dạng semaphore: named (được đặt tên) và unnamed (không
được đặt tên). Một số tiến trình không liên quan có thể dễ dàng truy cập cùng một semaphore được đặt tên đơn giản bằng cách tham chiếu đến
tên của nó. Semaphore không được đặt tên không thể được chia sẻ dễ dàng và yêu cầu đặt semaphore trong một vùng bộ (shared memory).

8 Dead lock
• Deadlock xảy ra trong một tập hợp các tiến trình khi mỗi tiến trình trong tập hợp đang chờ một sự kiện mà chỉ có thể được gây ra bởi một tiến
trình khác trong tập hợp đó.
• Deadlock có bốn điều kiện cần thiết: (1) mutual exclusion, (2) hold and wait, (3) no preemption, and (4) circular wait. Deadlock chỉ
xảy ra khi cả bốn điều kiện đều có mặt.
• Deadlock có thể được mô hình hóa bằng các đồ thị phân bổ tài nguyên, trong đó một chu kỳ biểu thị bế tắc.
• Deadlock có thể được ngăn chặn bằng cách đảm bảo rằng một trong bốn điều kiện cần thiết cho bế tắc không thể xảy ra. Trong bốn điều kiện cần
thiết, loại bỏ circular wait là cách tiếp cận thực tế duy nhất.
• Deadlock có thể tránh được bằng cách sử dụng thuật toán của Banker, thuật toán này không cấp tài nguyên nếu việc làm như vậy sẽ dẫn hệ thống
vào trạng thái không an toàn, nơi có thể xảy ra Deadlock.
• Thuật toán phát hiện Deadlock có thể đánh giá các tiến trình và tài nguyên trên hệ thống đang chạy để xác định xem một tập hợp các tiến trình
có đang ở trạng thái Deadlock hay không.
• Nếu Deadlock xảy ra, hệ thống có thể cố gắng phục hồi khỏi bế tắc bằng cách hủy bỏ một trong các tiến trình trong vòng đợi theo vòng tròn hoặc
chiếm đo trước các tài nguyên đã được gán cho một tiến trình Deadlock.

9 Main memory
• Memory đóng vai trò trung tâm trong hoạt động của hệ thống máy tính hiện đại và bao gồm một mảng lớn các byte, mỗi byte có địa chỉ riêng.
• Một cách để phân bổ không gian địa chỉ cho mỗi process là thông qua việc sử dụng các thanh ghi cơ sở và giới hạn. Thanh ghi cơ sở chứa địa chỉ
bộ nhớ vật lý hợp lệ nhỏ nhất và giới hạn quy định kích thước của phạm vi.
• Việc Binding địa chỉ logic với địa chỉ vật lý thực tế có thể xảy ra trong quá trình (1) compile, (2) load, hoặc (3) execution time.
• Địa chỉ do CPU tạo ra được gọi là địa chỉ logic, đơn vị quản lý bộ nhớ (MMU) sẽ dịch địa chỉ này thành địa chỉ vật lý trong bộ nhớ.
• Một cách phân bổ bộ nhớ là phân bổ các phân vùng bộ nhớ contiguous (liền kề) có kích thước khác nhau. Các phân vùng này có thể được phân
bổ dựa trên ba chiến lược sau: (1) first fit, (2) phù best fit, (3) worst fit.
• Hệ điều hành hiện đại sử dụng paging để quản lý bộ nhớ. Trong quá trình này, bộ nhớ vật lý được chia thành các khối có kích thước cố định gọi
là frame và bộ nhớ logic được chia thành các khối có cùng kích thước gọi là page.
• Khi sử dụng paging, địa chỉ logic được chia thành hai phần: số trang và offset trang. Số trang đóng vai trò như một chỉ mục trong page table của
mỗi tiến trình, chứa khung trong bộ nhớ vật lý lưu trữ trang đó. Offset là vị trí cụ thể trong frame đang được tham chiếu.
• Translation look-aside buffer (TLB) là bộ nhớ cache phần cứng của page table. Mỗi mục TLB chứa một số trang và khung tương ứng của nó.
• Sử dụng TLB để dịch địa chỉ cho các hệ thống phân trang liên quan đến việc lấy số trang từ địa chỉ logic và kiểm tra xem khung cho trang đó có
nằm trong TLB hay không. Nếu có, khung được lấy từ TLB. Nếu khung không có trong TLB, nó phải được lấy từ page table.
• Phân trang phân cấp liên quan đến việc chia một địa chỉ logic thành nhiều phần, mỗi phần tham chiếu đến các cấp khác nhau của bảng trang.
Khi địa chỉ mở rộng vượt quá 32 bit, số cấp phân cấp có thể trở nên lớn. Hashed page table (bảng trang băm) và inverted page table (bảng trang
đảo ngược) là hai chiến lược giải quyết vấn đề này.
• Swapping cho phép hệ thống di chuyển các trang thuộc về một tiến trình sang đĩa để tăng mức độ multiprogramming.
• Kiến trúc Intel 32-bit có hai cấp bảng trang và hỗ trợ kích thước page 4 KB hoặc 4 MB. Kiến trúc này cũng hỗ trợ mở rộng địa chỉ page, cho phép
bộ xử lý 32-bit truy cập vào không gian địa chỉ vật lý lớn hơn 4 GB. Kiến trúc x86-64 và ARMv9 là các kiến trúc 64-bit sử dụng phân trang phân
cấp.

10 Virtual memory
• Virtual memory trừu tượng hóa bộ nhớ vật lý thành một mảng lưu trữ thống nhất cực lớn.
• Lợi ích của bộ nhớ ảo bao gồm: (1) chương trình có thể lớn hơn bộ nhớ vật lý, (2) chương trình không cần phải hoàn toàn nằm
trong bộ nhớ, (3) các tiến trình có thể chia sẻ bộ nhớ và (4) các tiến trình có thể được tạo hiệu quả hơn.
• Demand paging là kỹ thuật theo đó các trang chỉ được nạp vào bộ nhớ khi chúng được yêu cầu trong quá trình thực thi chương trình. Do đó,
các trang không bao giờ được yêu cầu sẽ không bao giờ được nạp vào bộ nhớ.
• Page fault xảy ra khi truy cập vào một trang hiện không có trong bộ nhớ. Trang phải được đưa từ vùng lưu trữ dự phòng vào một khung trang
có sẵn trong bộ nhớ.
• Copy-on-write cho phép tiến trình con chia sẻ cùng một không gian địa chỉ với tiến trình cha. Nếu tiến trình con hoặc tiến trình cha ghi (sửa
đổi) một trang, thì một bản sao của trang sẽ được tạo.
• Khi bộ nhớ khả dụng sắp hết, thuật toán thay thế trang (page-replacement algorithm) sẽ chọn một trang hiện có trong bộ nhớ để thay thế bằng
một trang mới. Các thuật toán thay thế trang bao gồm FIFO, optimal, and LRU. Pure LRU algorithms rất khó để triển khai, và hầu hết các
hệ thống sử dụng LRU-approximation algorithms.
• Thuật toán thay thế trang toàn cục chọn một trang từ bất kỳ tiến trình nào trong hệ thống để thay thế, trong khi thuật toán thay thế trang cục
bộ chọn một trang từ tiến trình lỗi.
• Thrashing xảy ra khi hệ thống dành nhiều thời gian cho việc phân trang hơn là thực thi.
• Nén bộ nhớ là một kỹ thuật quản lý bộ nhớ nén một số trang thành một trang duy nhất. Bộ nhớ được nén là một phương pháp thay thế cho phân
trang và được sử dụng trên các hệ thống di động không hỗ trợ phân trang.
• Bộ nhớ nhân được phân bổ khác với các tiến trình ở chế độ người dùng; nó được phân bổ thành các khối liền kề có kích thước khác nhau. Hai kỹ
thuật phổ biến để phân bổ bộ nhớ nhân là (1) the buddy system và (2) slab allocation.
• Phạm vi TLB đề cập đến lượng bộ nhớ có thể truy cập được từ TLB và bằng với số mục nhập trong TLB nhân với kích thước trang. Một kỹ thuật
để tăng phạm vi TLB là tăng kích thước trang.
• Linux, Windows và Solaris quản lý bộ nhớ ảo tương tự nhau, sử dụng demand paging and copy-on-write, cùng với các tính năng khác. Mỗi hệ
thống cũng sử dụng một biến thể của xấp xỉ LRU được gọi là thuật toán đồng hồ (clock algorithm).

You might also like