Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

I.

Giới thiệu
- Hệ điều hành là một chương trình trung gian giữa user và phần cứng máy tính
- Chức năng: quản lí & cấp phát hiệu quả tài nguyên phần cứng, thực thi chương trình của
user
- Kiến trúc hệ máy tính:
+ Hệ đơn vi xử lí
+ Hệ đa vi xử lí ( hệ đa lõi ): gồm 2 kiểu là hệ đối xứng ( lõi giống nhau ) và hệ không đối
xứng ( lõi khác nhau )
- Thuật ngữ:
+ Xử lí theo lô ( batch processing )
+ Đa chương trình: các chương trình cần sử dụng CPU sẽ được gom ở trong job pool,
một chương trình được thực thi và chiếm giữ CPU cho đến khi có yêu cầu vào/ra || kết thúc
|| bị ngắt thì chương trình đó sẽ bị chuyển lại vào job pool và chương trình khác được chiếm
CPU
+ Phân chia thời gian/ đa nhiệm: giống đa chương trình nhưng có them điều kiện thứ tư
đó là có giới hạn thời gian chiếm giữ CPU
- Một số hệ điều hành:
+ UNIX ( 1970 ): Solaris, Linux…
+ Windows (1989)
+ Mac OS, Mac OS X ( 1984 )
+ iOS, Android
- TÌM HIỂU THÊM
+ Hệ phân cụm ( clustered systems )
+ Hệ phân tán ( distributed systems )
+ Điện toán đám mây ( cloud computing )
+ Điện toán trên thiết bị di động ( mobile computing )
II. Cấu trúc hệ điều hành

- Tập lệnh: MS – DOS và Shell


- API ( Application Programming Interface ): là một tập hợp các commands, protocols,
functions…để giúp hai phần mềm ( ứng dụng ) có thể tương tác hoặc trao đổi dữ liệu với
nhau.
- Các hàm hệ thống ( system calls ): cung cấp giao diện lập trình tới các dịch vụ do hệ điều
hành cung cấp
-Được các chương trình truy cập thông qua API
- Các chương trình hệ thống ( system programs ): cung cấp môi trường thuận tiện cho việc
phát triển và thực thi các chương trình. Bao gồm:

- Cấu trúc hệ điều hành đơn giản:

- Chương trình thường trú (Resident System Program) thường là các phần mềm hay chương
trình máy tính chạy liên tục trong bộ nhớ của máy tính, được tải và giữ lại trong bộ nhớ khi
hệ điều hành khởi động. Những chương trình này giữ vai trò quan trọng trong quản lý hệ
thống và cung cấp các dịch vụ cơ bản cho các ứng dụng và người dùng. VD: Task Manager,
Memory Manager…
- Kiến trúc vi nhân ( microkernel ) : giảm kích cỡ nhân bằng cách chỉ giữ đủ các chức năng
thiết yếu nhất. VD: Mach, Windows NT, QNX
- Kiến trúc Module: từ một lõi với những chức năng thiết yếu người ta bổ sung dần các gói
chức năng – module ( hiện năng là cách tốt nhất để tiếp cận hệ điều hành )
- Máy ảo: giúp tạo ra một lớp trừu tượng ( môi trường ảo ) giữa phần cứng và phần mềm,
cho phép nhiều hệ điều hành và ứng dụng chạy đồng thời trên cùng một máy tính vật lý. Ảo
hóa là không cần chia phần cứng vật lí cũng như máy tính để tải một OS khác, mà có thể tải
ngay trên OS hiện tại. Hypervisor: là công nghệ cho phép lưu trữ nhiều máy ảo, nó được sử
dụng để tạo, startup, dừng và reset lại các máy ảo. Các hypervisor cho phép mỗi VM hoặc
“guest” truy cập vào lớp tài nguyên phần cứng vật lý bên dưới, chẳng hạn như CPU, RAM và
lưu trữ. Nó cũng có thể giới hạn số lượng tài nguyên hệ thống mà mỗi máy ảo có thể sử
dụng để đảm bảo cho nhiều máy ảo cùng sử dụng đồng thời trên một hệ thống.
III. Tiến trình
- Tiến trình là một chương trình đang được thực thi
- Mỗi đơn vị thực hiện của tiến trình, tức là một chuỗi lệnh được cấp phát CPU để thực hiện
độc lập gọi là một luồng thực hiện

- Một tiến trình bao gồm:


+ Phần văn bản chứa mã chương trình
+ Bộ đếm của chương trình
+ Ngăn xếp chứa dữ liệu tạm thời
+ Phần dữ liệu chứa biến toàn cục
+ Heap chứa bộ nhớ động cấp phát trong lúc chạy
- Các trạng thái của tiến trình:
- Khối điều khiển tiến trình – PCB ( Process Control Block ): lầ cấu trúc dữ liệu chứa thông tin
quản lí cho mỗi tiến trình trong hệ thống
- Lập lịch cho tiến trình: vì tài nguyên máy tính luôn luôn là hữu hạn mà tiến trình thì ngày
càng nhiều nên việc lập lịch sẽ giúp tối ưu việc sử dụng CPU. Các tiến trình sẽ được đưa vào
các hàng chờ:
+ Job queue: Là một danh sách các công việc (jobs) chưa được xử lý hoặc đang chờ để
được thực hiện trong hệ thống. Công việc sẽ được lựa chọn từ hàng chờ nhiệm vụ và di
chuyển đến hàng chờ sẵn sàng khi chúng đã được load vào bộ nhớ để thực hiện
+ Ready queue: Là một danh sách các tiến trình (processes) đã sẵn sàng để chạy và đang
đợi để được thực hiện trên CPU
+ Device queue: khi tiến trình đang chờ một thiết bị vào/ra

- Phân loại các bộ lập lịch:


+ Dài hạn: lựa chọn tiến trình để chuyển sang hàng chờ sẵn sàng
+ Ngắn hạn: lựa chọn tiến trình tiếp theo được sử dụng CPU
+ Trung hạn: di chuyển tiến trình đang trong trạng thái chờ giữa bộ nhớ trong và bộ nhớ
ngoài
- CPU chuyển từ tiến trình này sang tiến trình khác:
- Chuyển trạng thái ( Context Switch ):
+ Khi thực hiện chuyển trạng thái, hệ thống không làm việc gì khác
- Tạo tiến trình:
+ Có 4 cách để tạo tiến trình: khởi tạo hệ thống, một tiến trình đang chạy thực thi hàm
hệ thống tạo tiến trình, người dùng yêu cầu, bắt đầu thực thi một nhiệm vụ trong chế độ xử
lí theo lô
- Kết thúc tiến trình:

- Truyền thông giữa các tiến trình:


+ Các tiến trình trong một hệ thống có thể là tiến trình độc lập hoặc hợp tác
+ Tiến trình hợp tác có thể ảnh hưởng lẫn nhau bởi tiến trình khác, bao gồm việc chia sẻ
dữ liệu
+ Mục đích hợp tác tiến trình: chia sẻ thông tin, tính toán nhanh hơn, cho phép mô đun
hóa, thuận tiện
+ Hợp tác tiến trình cần phương thức truyền thông các tiến trình ( IPC )
- Các hệ thống truyền thông điệp:
+ Cho phép tiến trình truyền thông với nhau qua các toán tử send() và receive()
+ Cần có một kết nối giữa hai tiến trình để truyền thông điệp: kết nối vật lí và kết nối
logic
- Vấn đề đồng bộ hóa: việc trao đổi thông điệp có thể ở phương thức chờ ( blocking ) hoặc
phương thức không chờ ( non-blocking)

- Vấn đề sừ dụng vùng đệm ( buffer ):


+ Các thông điệp nằm trong hàng chờ tạm thời
+ Kích cỡ của hàng chờ
* Chứa được 0 thông điệp: send blocking
* Chứa được n thông điệp: send non-blocking cho đến khi hàng chờ có n thông
điệp, sau đó send blocking
* Vô hạn: send non-blocking
- Lập lịch CPU: lựa chọn giữa các tiến trình/luồng đã sẵn sàng chạy để cấp phát CPU cho nó
- Các phương pháp lập lịch:
+ Không cho phép dừng ( Nonpreemptive ): bộ lập lịch hoạt động khi tiến trình đang
chạy kết thúc hoặc không thể chạy tiếp ( các hệ điều hành cũ )
+ Cho phép dừng ( Preemptive ): bộ lập lịch hoạt động bất cứ khi nào có thể
- Bộ điều phối ( dispatcher ):
+ Trao quyền điều khiển CPU cho các tiến trình được chọn bởi bộ lập lịch CPU: chuyển
trạng thái, chuyển về chế độ người dùng, thực hiện tiến trình theo trạng thái đã lưu
+ Thời gian cần để bộ điều phối dừng một tiến trình và thực hiện một tiến trình khác gọi
là độ trễ (latency) của bộ điều phối
- Các tiêu chí của bộ lập lịch:
+ Tối đa thời gian sử dụng CPU
+ Tối đa hóa số lượng tiến trình hoàn thành trong một đơn vị thời gian
+ Giảm thiểu thời gian quay vòng – thời gian để thực thi một tiến trình
+ Giảm thiểu thời gian phản hồi khi có yêu cầu
+ Giảm thiểu thời gian chờ đợi CPU trong hàng đơi sãn sàng
- Các thuật toán lập lịch:
+ FCFS ( First Come First Served ): tiến trình nào có yêu cầu sử dụng CPU trước thì được
thực hiện trước. Ưu: thuật toán đơn giản. Nhược: hiệu quả của thuật toán phụ thuộc vào
thứ tự của các tiến trình trong hàng chờ, vì thứ tự này ảnh hưởng đến thời gian chờ trungg
bình. Hiện tượng “đoàn hộ tống”: tiến trình có thời gian chạy ngắn chờ sau tiến trình có thời
gian chạy dài, CPU và thiết bị vào ra có nhiều thời gian rỗi và thời gian chờ trung bình của các
tiến trình cao
+ SJF ( Shortest Job First ): mỗi tiến trình có them tham số độ dài của phiên sử dụng CPU
tiếp theo (t). Tiến trình nào có t nhỏ nhất sẽ được lập lịch sử dụng CPU trước. Nếu hai tiến
trình có t bằng nhau thì khi đó FCFS sẽ được sử dụng. Nhược: khó khăn trong việc dự đoán
(t). Dự đoán (t) thông qua hàm trung bình lũy thừa

- Lập lịch ưu tiên:


+ Mỗi tiến trình có một số hiệu ưu tiên
+ Cấp phát CPU cho tiến trình có thứ tự ưu tiên cao nhất
+ SJF là trường hợp đặc biệt của ưu tiên ( ưu tiên theo độ dài phiên sử dụng CPU )
- Lập lịch Round Robin ( RR):
+ Áp dụng cho hệ thống chia sẻ thời gian
+ Mỗi tiến trình chiếm CPU trong 1 đơn vị thời gian ( time quantum ~ q ). Sau khoảng
thời gian này, tiến trình sẽ bị dừng lại, xếp hàng chờ ở cuối hàng đợi sẵn sàng
+ Nếu có n tiến trình trong hàng đợi sẵn sàng thì không tiến trình nào phải đợi lâu hơn (n
– 1)q đơn vị thời gian. Nếu q lớn thì giống FCFS, ngược lại mất nhiều thời gian để chuyển
trạng thái

- 80% thời gian chạy CPU nên nhỏ hơn q


- Lập lịch hàng đợi đa cấp:
+ Hàng đợi sẵn sàng được chia ra thành nhiều hàng đợi.
+ Mỗi tiến trình chỉ được ở một hàng đợi được sắp xếp từ trước
+ Mỗi hàng đợi có thuật toán lập lịch riêng
+ Cần có thuật toán lập lịch giữa các hàng đợi
- Lập lịch hàng đợi phản hồi đa cấp:
+ Tiến trình có thể di chuyển giữa các hàng đợi
+ Sử dụng các tham số: số lượng hàng đợi, thuật toán cho mỗi hàng đợi, phương thức
chuyển tiến trình lên hàng đợi có ưu tiên cao hơn và ngược lại, phương thức chọn hàng đợi
cho một tiến trình khi có yêu cầu

- Định luật Little

- Phương pháp mô phỏng


- Lập lịch cho luồng, lập lịch cho hệ đa vi xử lí, lập lịch cho CPU thời gian thực ( tìm hiểu
thêm)
- Đồng bộ hóa tiến trình:
+ Tương tranh và đồng bộ: tình huống xuất hiện khi nhiều tiến trình cùng thao tác trên
dữ liệu chung và kết quả các thao tác đó phụ thuộc vào thứ tự thực hiện cuả các tiến trình
trên dữ liệu chung gọi là tình huống tương tranh
+ Để tránh tình huống tương tranh các tiến trình cần được đồng bộ theo một phương
thức nào đó
- Khu vực quan trọng:
+ Mỗi tiến trình có một đoạn mã truy cập vào khu vực quan trọng
+ Khi một tiến trình thực thi khu vực quan trọng, không một tiến trình nào khác được
thực thi khu vực quan trọng
- Các điều kiện cần đảm bảo để giải quyết bài toán khu vực quan trọng: loại trừ lẫn nhau,
tiến triển, chờ đợi có giới hạn
- Giải pháp Peterson:
+ Tham số turn chỉ tiến trình đến lượt vào CS
+ Flag[i] = true tiến trình sẵn sàng làm việc với CS
- Đồng bộ hóa phần cứng: giải pháp cho vấn đề khu vực quan trọng thông qua Khóa
- Khái niệm Semaphore: là một cấu trúc dữ liệu đồng bộ hóa được sử dụng trong lập trình đa
nhiệm để quản lý việc truy cập đồng thời vào tài nguyên được chia sẻ. Semaphore giúp kiểm
soát quyền truy cập vào các phần quan trọng của mã nguồn, đặc biệt là trong các tình huống
mà nhiều tiến trình hoặc luồng cố gắng truy cập cùng một tài nguyên.
+ wait() và signal()

You might also like