khái niệm:có những định nghĩa khác nhau về hệ điều hành tùy quan điểm:
+hệ điều hành là chương trình quản lý phần cứng máy tính, là bộ điều phối tài nguyên, hệ điều hành nắm giữ các tài nguyên nó có nhiệm vụ cấp phát và thu hồi các tài nguyên này cho người dùng luân phiên nhau. tài nguyên ở đây bao gồm các CPU, bộ nhớ thiết bị giao tiếp mạng, thiết bị nhập xuất và ổ đĩa
+hệ điều hành là 1 máy ảo, nghĩa là hệ điều hành cung cấp cho người dùng 1 máy tính ảo, máy ảo này có thể giống máy vật lý thật, có thể là 1 máy tính hoàn toàn khác, có thể là 1 máy tính mạnh hơn, điều quan trọng là máy ảo tạo cho người dùng tin rằng, họ sở hữu riêng các tài nguyên phần cứng cần thiết cho nhu cầu của mình.
+ hệ điều hành là 1 bộ giúp chia sẽ các tài nguyên chung, hệ điều hành chịu trách nhiệm phân chia phòng chống xâm phạm tài nguyên giữa các người dùng, đồng thời quản lý sự cộng tác  của người dùng trong việc sử dụng chung nguồn tài nguyên hạn hẹp, đây cũng là góc nhìn kinh tế, vì chúng ta không thể mua sắm hết các tài nguyên cần thiết
=>máy ảo, chương trình phát thu hồi, bộ tài nguyên dùng chung
-nếu chúng ta có thể cung cấp đủ các tài nguyên phần cứng thì chúng ta cũng cần phải có hệ điều hành vì
+nó cung cấp các giao diện trung gian, giúp người dùng dễ dàng sử dụng các dịch vụ, các tính năng của phần cứng.
+không có sự phân biệt giữa phần mềm ứng dụng và hệ điều hành
các chức năng chính của hệ điều hành
-quản lý chia sẽ tài nguyên
+chia sẽ các tài nguyên phần cứng, và quản lí các truy xuất tài nguyên phần mềm
-giả lập 1 máy tính mở rộng
+hệ điều hành làm ẩn đi các chi tiết phần cứng, người dùng được cung cấp 1 giao diện đơn giản, thực ra chúng ta có thể xem hệ điều hành như là 1 hệ thống bao gồm nhiều máy tính trừu tượng xếp thành nhiều lớp chồng lên nhau, máy tính mức dưới phục vụ cho máy tính mức trên(giống như các tầng của mạng máy tính) lớp trên cùng là giao diện trực quan giúp chúng ta dễ điều khiển
- ngoài ra chúng ta có thể chia chức năng của hệ điều hành theo 4 chức năng sau
+quản lý tiến trình(process management)
+quản lý bộ nhớ(memory management)
+quản lý hệ thống lưu trữ(storage management)
+giao tiếp với người dùng(user interface)
-khi chúng ta xây dựng 1 hệ điều hành mới chúng ta sẽ phải đưa ra các giải pháp cho các vấn đề cốt lõi sau
+giao diện tương tác với nhân hệ điều hành: nghĩa là máy ảo mà hệ điều hành cung cấp cho người dùng phải như thế nào, chức năng giao diện của các hàm thủ tục(system call) sẽ được cung cấp cho các ứng dụng người dùng
+quản lý tai nguyên:tài nguyên phần cứng được điều phối(cấp phát và thu hồi )giữa nhiều người dùng như thế nào,
+chia sẻ: tài nguyên  được chia sẻ và bảo vệ giữa những người dùng như thế nào
+an toàn:làm sao để bảo vệ người dùng, bảo vệ các chương trình giữa các chương trình khác, làm sao để bảo vệ an toàn cho các thiết bị người dùng chung
+truyền thông: giao tiếp giữa các ứng dụng như thế nào, khi chúng trên cùng 1 máy hoặc 1 máy khác
+cấu trúc : tổ chức các thành phần bên trong hệ điều hành như thế nào
+đồng thời: làm sao các chương trình có thể thực thi đồng thời, nghĩa là 1 chương trình đang chờ đợi nhập xuất thì chương trình khác sẽ sử dụng CPU
+thực thi: làm sao mọi ứng dụng đều có thể thực thi nhanh
+tin cậy: làm sao để tránh việc treo sụp hệ thống....
-các thành phần của hệ điều hành
+hệ thống quản lý tiến trình
+hệ thống quản lý bộ nhớ
+hệ thống quản lý tập tin
+hệ thống quản lý nhập xuất
+hệ thống bảo vệ
+hệ thống quản lý dịch lệnh
+quản lý mạng
-quản lý tiến trình:tiến trình là phiên bản của chương trình đang thực thi. trong máy tính von neumann, mỗi CPU chỉ có thể thực thi 1 tiến trình duy nhất tại 1 thơi điểm, đến năm 1960 thì hệ điều hành cho các máy tính lớn hỗ trợ đa nhiệm, cho phép nhiều chương trình thực thi đồng thời thông qua cơ chế đa nhiệm dù chỉ có 1 CPU, hệ điều hành ưu tiên các tiến trình dựa vào phân loại, để 1 số tiến trình được cung cấp nhiều thời gian sử dụng CPU nhiều hơn, hay chiếm được nhiều phần trên bộ nhớ hơn so với các tiến trình khác, các tiến trình xử lý ngắt luôn được ưu tiên cao nhất
-quản lý bộ nhớ
+kiến trúc máy tính được sắp xếp theo bộ nhớ máy tính theo phân lớp, bắt đầu là các thanh ghi với độ truy cập rất nhanh, đến CPU cache, bộ nhớ chính RAM, bộ nhớ ngoài(đĩa cứng), hệ quản lý bộ nhớ chịu tránh nhiệm quản lý và thu hồi phối hợp giữa các vùng nhớ để mang lại hiệu quả cao nhất, công việc quan trọng là việc xấy dựng bộ nhớ ảo, tạo ra 1 vùng nhớ lớn hơn nhiều so với bộ nhớ chính, để giúp cho nhiều tiến trình có thể thực thi song song với nhau, kĩ thuật thường dùng là sử dụng 1 phần của đĩa cứng làm vùng nhớ phụ cho bộ nhớ chính, nhưng nếu các tiến trình yêu cầu vùng nhớ lớn hơn nhiều so với phần cứng có sẵn, hệ thống sẽ rơi vào sự trì trệ, điều này xảy ra bởi vì có sự luân phiên chuyển dữ liệu liên tục giữa ram và ổ cứng
+1 phần quan trọng  khác trong quản lý bộ nhớ là quản lý địa chỉ ảo, vì mỗi tiến trình sẽ nhìn thấy toàn bộ địa chỉ ảo từ 0 đến tối đa, vì vậy hệ thống quản lý bộ nhớ không cho phép các tiến trình xâm phạm địa chỉ nhau, kĩ thuật này được sử dụng là bảng trang,để ánh xạ từ trang ảo vào trang thật trong bộ nhớ vật lý, hệ thống  quản lý bộ nhớ sẽ lưu giữ tiến trình nào được lưu trữ trong trang nào, 1 khi tiến trình kết thúc các trang này sẽ được thu hồi và được cung cấp cho các trang mới, 1 kĩ thuật được sử dụng để tăng tốc độ truy xuất dữ liệu là sử dung cache, cache là vùng nhớ nhỏ nhưng được truy xuất rất nhanh, các dữ liệu thường xuyên được truy xuất có thể được lưu trữ trên cache để tăng tốc độ thực thi của chương trình, cũng với mục tiêu tăng tốc hệ thống cũng có thể nạp trước những dữ liệu của 1 tiến trình mới
-quản lý hệ thống tập tin
+các hệ quản lý tập tin phải cho phép phục hồi tập tin khi máy tính gặp sự cố bất ngờ, như mất nguồn điện hoặc bị treo
-quản lý nhập xuất
+việc điều khiển các thiết bị kết nối với máy tính cũng là 1 mảng chính trong việc thiết kế hệ điều hành, bởi vì các thiết bị nhập xuất khá đa dạng từ tính năng lẫn tốc độ (chuột, bàn phím, CD-ROM), nên cần nhiều cách khác nhau để điều khiển chúng
+hệ điều hành phải có mô dun tích hợp nhiều thiết bị, mô dun này phải cung cấp các giao diện chuẩn đến các thiết bị cụ thể, cũng giống như các hàm system call phải cung cấp giao diện cho chương trình người dùng gọi là các dịch vụ bên trong hệ điều hành
-hệ thống dịch lệnh
+nó đóng vai trò là giao diện giữa người dùng và hệ điều hành, nó chịu trách nhiệm nhận các chỉ thị điều khiển từ người dùng, vd chương trình shell phiên dịch thành các lệnh gửi cho hệ điều hành xử lý, hệ thống thông dịch giúp cho người dùng xử dụng máy tính mà không cần phải lập trình
-đảm bảo an toàn hệ thống
+hệ điều hành quản lý quyền truy cập các tài nguyên nó là trung gian để truy cập vào các tài nguyên
+hệ điều hành phải phân biệt được 1 yêu cầu là được phép hay không được phép
-quản lý mạng
+hầu hết các hệ điều hành hiện nay đều cài đặt bộ giao thức TCP/IP, nghĩa là 1 máy tính có thể trở thành 1 thành viên trên mạng và các máy tính trên cùng 1 mạng có thể chia sẻ các tài nguyên thông qua đường truyền có dây hoặc không dây
phân loại hệ điều hành
-hệ thống xử lý theo lô:
+điểm yếu: phải chờ các thiết bị nhập xuất
-hệ thống đa chương: 
+điểm yếu: lỡ có 1 chương trình chạy mãi hay quá dài thì nó không thể chạy sang chương trình khác để chương trình ít thời gian hơn chạy trc được
-hệ thống chia sẽ thời gian:
-hệ thống song song:có nhiều bộ xử lý
bộ nhớ:
+về ý tưởng bộ nhớ phải nhanh lớn và rẻ:phần bộ nhớ chính thuộc nhóm khả biến, nghĩa là nôi dung bộ nhớ này sẽ bị mất nếu máy tính mất nguồn cung cấp năng lượng hay do khởi động lại, thanh ghi là phần truy xuất bộ nhớ nhanh nhất chúng được làm cùng vật liệu so với CPU nên tốc độ nhanh như CPU, tốc độ nhanh thứ 2 là cache, phần bộ nhớ chính lớn nhất là RAM là 1 phần bộ nhớ quan trọng khác rom thường được lập trình từ nhà sản xuất, và không thể thay đổi về sau, 1 số thiết bị nhập xuất có phần rom để chứa các lệnh điều khiển thiết bị cấp thấp
+1 loại bộ nhớ khác nữa là CMOS thuộc nhóm volatile thường được dùng để lưu giờ và ngày,CMOS được nuôi bởi 1 nguồn pin nhỏ vì vậy ngay khi tắt máy, ngày và giờ vẫn được cập nhật
+bộ nhớ chính(register, ram, rom cache)
-ở đĩa
+khởi động máy tính(BOOTING)
tiến trình
-1 tiến trình là 1 chương trình máy tính đang thực thi, khi nhắc đến chương trình máy tính là nói đến 1 thực thể tĩnh, nó là 1 tập hợp các câu lệnh, nhiều tiến trình có thể có nguồn gốc từ 1 chương trình, các tiến trình khởi nguồn từ 1 chương trình có thể thực thi song song, độc lập lẫn nhau, hoặc các tiến trình có thể phụ thuộc lẫn nhau và thực hiện theo 1 tuần tự nhất định, các máy tính ngày nay cho phép nhiều tiến trình và chương trình được nạp vào  máy tính cùng 1 lúc, nhờ vào cơ chế chia sẽ thời gian time sharing(còn được gọi là cơ chế đa nhiệm) điều này giúp người dùng cảm giác như nhiều chương trình đang được thực thi song song mặc dù máy tính chỉ có 1 CPU. tuy nhiên
tổng quan
-về tông quan 1 tiến trình máy tính bao gồm các tài nguyên sau
+ảnh của 1 đoạn mã máy đang được thực thi
+bộ nhớ thông thường là 1 vùng nào đó trên bộ nhớ ảo, bao gồm: mã nguồn chương trình, dữ liệu nhập xuất của tiến trình, 1 ngăn xếp để lưu vết các lời gọi hàm hoặc sự kiện, và 1 heap để lưu các dữ liệu, tham số phát sinh trong quá trình thực thi.
+1 bộ chỉ mục các tài nguyên của hệ điều hành để chỉ định các tài nguyên được cấp phát cho tiến trình
ảnh của 1 chương trình đang thực thi
-1 chương trình đang thực thi
+chúng ta đến với việc quản lý tiến trình của hệ điều hành thông qua các ví dụ đơn giản hơn
+1 chương trình C++ phải được biên dịch thành các câu lệnh mà máy tính có thể hiểu được, khi chương trình được gọi để thực thi, thì máy tính sẽ nạp chương trình này lên bộ nhớ. CPU dựa trên con trỏ lệnh để xác định vị trí bộ nhớ có lưu trữ câu lệnh mà nó phải thực hiện, các tham số câu lệnh được lưu trữ trên thanh ghi, các biến khai bào toàn cục thì các thủ tục trong chương trình đều có thể truy xuất đến chúng, có thể cấp phát 1 không gian cố định nào đó trên bộ nhớ, tuy nhiên hệ thống không thể làm điều tương tự với biến cục bộ , chúng ta không biết thủ tục cheat() được gọi đệ quy bao nhiêu lần, mà thủ tục cheat() vẫn chưa thi hành xong nên hệ điều hành không biết phải cấp phát bao nhiêu không gian cho biến này, ở trường hợp này hệ điều hành dùng stack, mỗi khi thủ tục cheat() được gọi thì hệ điều hành lưu vào stack
+khi đối tượng mới được tạo tất nhiên sẽ được cấp phát 1 vùng không gian trên bộ nhớ, câu hỏi đặt ra là stack có thích hợp lưu các đối tượng mới khởi tạo hay không vì chúng ta có thể tạo nhiều đối tượng mới, nếu đặt hết vào stack thì sẽ rất bất tiện cho việc sử dụng đối tượng này, hệ điều hành không thể cấp phát vùng nhớ ban đầu như các biến toàn cục được vì không biết nó có được thực thi hay không, kích thước vùng nhớ mà nó được yêu cầu được cấp phát và khi nào chúng được giải phóng
+vì kích thước bộ nhớ chính rất giới hạn nên các thiết kế cho hệ điều hành, trình biên dịch và người lập trình phải luôn tối ưu hóa cho việc sử dụng bộ nhớ để chương trình có thể thực thi nhanh hơn, trong trường hợp này heap được sử dụng,  heap là phần bộ nhớ mà hệ thống dùng để cấp phát cho các biến mới phát sinh trong quá trình thực thi => chỉ khi thực thi thì nó mới được cấp phát bộ nhớ nên chắc chắn nó được sử dụng chúng ta mới cấp phát bộ nhớ cho nó (lại 1 level mới cho con trỏ) 
-bản ghi hàm(activation record)
khi 1 thủ tục(hàm) được gọi thực thi thì chương trình phải quản lý các thông tin của thủ tục này, ví dụ như hệ điều hành phải lưu địa chỉ trả về của thủ tục được gọi, cũng như hệ điều hành phải lưu các tham số đầu vào cũng như các biến cục bộ trong 1 thủ tục, như vậy để 1 thủ tục được gọi thực thi, 1 chương trình cần có cấu trúc dữ liệu để lưu các thông tin cần thiết, và giải pháp trong trường hợp này là hệ điều hành sử dụng bản ghi hàm
+khi 1 chương trình gọi 1 thủ tục thì nó tạo ra bản ghi hàm, dữ liệu trong  bản ghi hàm được tổ chức như 1 bản ghi thông thường, chỉ có khác biệt duy nhất là địa chỉ cơ sở của bản ghi là ở giữa, vì vậy khi truy xuất các trường trong bản ghi thì bắt đầu từ địa chỉ cơ sở rồi cộng hoặc trừ địa chỉ offsets
+sau khi tạo ra bản ghi hàm, hệ điều hành ghi các tham số đầu vào của thủ tục vào stack, sau đó thực hiện lệnh call để ghi địa chỉ trả về của thủ tục vào stack. lúc này thủ tục bắt đầu ghi các giá trị thanh ghi và các thông số trạng thái  quan trọng vào stack. đồng thời cấp phát không gian trong bảng ghi hàm để lưu các biến cục bộ
khối quản lý tiến trình(process control block viết tắt là PCB)
+khối quản lý tiến trình là 1 cấu trúc dữ liệu nằm bên trong nhân hệ điều hành, nó chứa thông tin cần thiết để hệ điều hành có thể quản lý các tiến trình đang hoạt động
thông tin 1 PCB
các hệ điều hành khác nhau có thể thiết kế các cấu trúc dữ liệu PCB khác nhau nhưng chúng ta có thể liệt kê các thuộc tính chung mà 1 PCB thường có bao gồm
+đinh danh tiến trình
giúp phân biệt các tiến trình
+trạng thái tiến trình
xác định trạng thái hiện hành của tiến trình
+ngữ cảnh của tiến trình
mô tả các tài nguyên của tiến trình đang trong quá trình hoạt động , hoặc nhằm phục vụ cho các hoạt động hiện tại,  làm cơ sở phục hồi hoạt động cho các tiến trình bao gồm các thông tin
-trạng thái CPU: bao gồm nội dung thanh ghi và quan trọng nhất là nội dung con trỏ lệnh lưu địa chỉ câu lệnh kế tiếp mà tiến trình sẽ thực hiện, các thông tin này cần được quản lý để nếu nó xảy ra 1 ngắt, hệ điều hành có thể phục hồi hoạt động của tiến trình đúng như trước khi bị ngắt
-bộ xử lý: dùng cho máy có cấu hình nhiều CPU xác định số hiệu CPU mà tiến trình đang sử dụng
-bộ nhớ chính: danh sách các ô nhớ được cấp phát cho tiến trình
-tài nguyên sử dụng: danh sách các tài nguyên hệ thống mà tiến trình đang sử dụng, quan trọng là thông tin nhập xuất, thông tin thư mục gốc, thư mục hiện hành là thông tin các tập tin đang mở
-tài nguyên tạo lập: danh sách các tài nguyên được tiến trình tạo lập
+thông tin quan hệ:phản ánh các thông tin về quan hệ của 1 tiến trình với các tiến trình khác trong hệ thống
-tiến trình cha:tiến trình tạo lập tiến trình này
-tiến trình con: các tiến trình do tiến trình này tạo lập
- độ ưu tiên: giúp bộ điều phối có thông tin để lựa chọn tiến trình được cấp CPU
+thông tin thống kê: đây là những thông tin thống kê về hoạt động của tiến trình, như thời gian đã sử dụng CPU, thời gian chờ sử dụng CPU, thời gian chờ, các thông tin này có thể có ích cho việc đánh giá tình hình hệ thống và dự đoán các tình huống tương lai
vị trí lưu trữ PCB
bời vì PCB lưu trữ các thông tin tối quan trọng về tiến trình, nên PCB phải được lưu ở vùng nhớ được bảo vệ, nhằm tránh những truy cập từ các ứng dụng của người dùng bình thường, 1 số hệ điều hành lưu trữ PCB trong stack của nhân hệ điều hành, đây là vùng nhớ được bảo vệ và chỉ có thể truy xuất bởi nhân hệ điều hành
=> có nghĩa nó PCB này cần 1 vùng nhớ để lưu trữ và chỉ có thể được truy xuất bởi nhân hệ điều hành

trạng thái của tiến trình:
-1 tiền trình trải qua nhiều trạng thái khác nhau từ lúc nó hình thành cho đến lúc kết thúc, sự thay đổi trạng thái này do sự quyết định của hệ điều hành, số lượng cũng như tên của các trạng thái có thể khác nhau tùy thuộc vào thiết kế ở các hệ điều hành khác nhau, chúng ta không có chuẩn trong vấn đề này, tuy nhiên nhìn từ khía cạnh chức năng của chúng thì có những đặc trưng chung
+khi 1 tiến trình được khởi tạo, nó phải đợi bộ điều  phối tiến trình nạp nó từ bộ nhớ ngoài(như ổ đĩa cứng, flash drive hoặc CD ROM....) lên bộ nhớ chính và đặt vào trạng thái waiting cho nó. 1 khi tiến trình được chọn để thực thi, hệ thống sẽ thực hiện 1 chuyển đổi ngữ cảnh, ở đây là nạp tiến trình lên bộ xử lý, và đặt trạng thái tiến trình là running, bộ xử lý bắt đầu thực thi các lệnh của tiến trình, nếu tiến trình phải đợi tài nguyên nào đó, ví dụ như chờ người dùng nhập dữ liệu hoặc chờ mở 1 tập tin nào đó thì tiến trình đặt trong trạng thái blocked cho đến khi tiến trình không phải đợi tài nguyên nào nữa thì nó được chuyển về trạng thái waiting, 1 khi tiến trình được thực thi xong, hoặc bị kết thúc bởi hệ điều hành, thì tiến trình chuyển qua trạng thái terminated và chờ hệ thống giải phóng ra khỏi bộ nhớ chính
=> cái gì cần thì được chuyển tử đĩa lên ram sau khi không cần thiết nữa thì được giải phóng khỏi ram
-nếu 1 tiên trình ở trạng thái waiting hoặc blocked trong 1 khoảng thời gian lâu và có nhiều tiến trình khác được nạp lên bộ nhớ thì tiến trình có thể được chuyển vào vùng nhớ phụ(secondary memory). vùng nhớ phụ thường nằm trên ổ địa cứng ở những vị trí sector đặc biệt mà hệ thống có thể truy xuất nhanh, tuy nhiên nó vẫn chậm hơn nhiều so với bộ nhớ chính. nhưng vì kích thước của vùng nhớ chính khá hạn chế nên các hệ thống hỗ trợ đa nhiệm buộc phải dùng thêm vùng nhớ phụ
tiểu trình(thread)
rất nhiều phần mềm chạy trên máy tính cá nhân hiện đại cần xử lý công việc tại 1 thời điểm. ví dụ 1 trình duyệt web cần 1 tác vụ hiển thị hình ảnh, kí tự ra màn hình, trong khi đó trình duyệt cũng cần 1 tác vụ tải nội dung từ trang web về, như vậy có thể tăng tốc độ mở 1 trang web mới. hoặc trong 1 chương trình soạn thảo văn bản cần 1 tác vụ hiển thị hình ảnh, 1 tác vụ nhập liệu từ bàn phím, và 1 tác vụ dùng để kiểm tra lỗi chính tả. như vậy trong hệ điều hành hiện đại, để cho phép nhiều tác vụ trong cùng 1 chương trình có thể thực hiện đồng thời, thì hệ thống phải cho phép 1 tiến trình có thể chứa nhiều tiểu trình, mỗi tiểu trình sẽ thực hiện 1 tác vụ cơ sở trong 1 chương trình.
tổng quan
-1 tiểu trình là 1 tác vụ độc lập nhìn từ CPU, nó bao gồm định danh tiểu trình, 1 con trỏ lệnh, 1 thanh ghi và stack, các tiểu trình trong 1 tiến trình có thể chia sẽ vùng mã nguồn, vùng dữ liệu và những tài nguyên chung khác, ví dụ như tập tin đang mở, 1 tiến trình có thể có 1 hay nhiều tiểu trình, nếu tiến trình có nhiều tiểu trình thì nó có thể thực hiện nhiều tác vụ trong cùng 1 thời gian
mô hình đa tiểu trình
-có hai loại tiểu trình chính: tiểu trình người dùng(user thread) và tiểu trình hệ thống(kernel thread). tiểu trình người dùng hoạt động bên ngoài vùng hệ thống và không có sự hỗ trợ quản lý của hệ điều hành, tiểu trình hệ thống được hỗ trợ và quản lý trực tiếp bởi hệ điều hành, các hệ điều hành hiện thời đều hỗ trợ tiểu trình hệ thống
mô hình nhiều-một
-trong mô hình nhiều 1 nhiều tiểu trình người dùng được ánh xạ vào trong 1 tiểu trình hệ thống, bộ quản lý tiểu trình được đặt trong vùng người dùng nên khá linh hoạt. tuy nhiên bộ quản lý tiến trình sẽ bị tạm dừng nếu như 1 tiểu trình nào đó gọi hàm hệ thống. bởi vì chỉ có 1 tiểu trình có thể truy cập hệ thống tại 1 thời điểm
mô hình 1 1
mô hình 1 1 ánh xạ mỗi tiến trình người dùng vào 1 tiến trình hệ thống, điều này cho phép nhiều tiểu trình có thể thực thi đồng thời, ngay cả khi có 1 tiểu trình gọi 1 hàm hệ thống, nó cũng cho phép nhiều tiểu trình thực thi song song trên máy tính có nhiều bộ xử lý, điều bất lợi duy nhất là  khi có 1 tiểu trình người dùng mới thì hệ thống phải tạo ra 1 tiểu trình hệ thống để phục vụ tiểu trình mới này, nếu tạo ra quá nhiều tiểu trình thì sẽ ảnh hưởng lớn đến hiệu quả thực thi của hệ thống, hầu hết các hệ điều hành sử dụng mô hình này giới hạn sử dụng số lượng tiểu trình đống thời
mô hình nhiều nhiều
mô hình nhiều nhiều ánh xạ nhiều tiểu trình người dùng sang 1 số lượng ít hơn(hoặc bằng) số tiểu trình hệ thống. số lượng tiểu trình hệ thống tùy thuộc vào ứng dụng cụ thể hoặc máy tính cụ thể(máy tính nhiều bộ xử lý thường cấp cho 1 ứng dụng nhiều tiểu trình hệ thống hơn máy tính 1 bộ xử lý). mô hình này không hạn chế số tiểu trình được tạo như trong mô hình 1 1. một trong những phổ biến của mô hình  nhiều nhiều là mô hình 2 lớp, mô hình này cho phép thêm trường hợp 1 tiểu trình người dùng gắn với 1 tiểu trình hệ thống
chuyển đổi ngữ cảnh(context switch)
chuyển đổi ngữ cảnh là 1 quá trình lưu lại trạng thái hiện hành và chuyển qua trạng thái khác(nạp mới hoặc phục hồi trạng thái được lưu trữ trước đây) của CPU sao cho nhiều tiến trình có thể chia sẽ cùng 1 CPU duy nhất. chuyển đổi ngữ cảnh là đặc tính tiêu biểu và nhất thiết phải có trong 1 hệ điều hành đa nhiệm, mỗi tác vụ chuyển đổi ngữ cảnh nhất thiết phải cần nhiều thời gian xử lý, vì vậy 1 trong những nhiệm vụ chính của việc thiết kế hệ điều hành đa nhiệm là làm sao tối ưu hóa việc chuyển đổi ngữ cảnh, chuyển đổi ngữ cảnh có thể là hoán chuyển giá trị bộ thanh ghi, hoán chuyển tác vụ hiện hành, hoán chuyển 1 tiểu trình, hoặc là hoán chuyển 1 tiến trình. việc định nghĩa ngữ cảnh là gì tùy thuộc vào hệ điều hành và bộ xử lý
+chuyển đổi ngữ cảnh được thực hiện như thế nào
-khi 1 tác vụ đang thực thi, thì có 2 tình huống mà hệ điều hành phải chuyển đổi ngữ cảnh để chuyển sang thực thi 1 tác vụ khác: bị chiếm CPU hoặc nhường CPU vì chờ đợi tải tài nguyên
bị chiếm CPU trường hợp này xảy ra khi 1 tác vụ khác được hệ thống đánh giá độ ưu tiên cao hơn tác vụ hiện hành
truy xuất thủ tục trong nhân hệ điều hành
-chúng ta sẽ tìm hiểu cơ chế mà hệ điều hành cho phép 1 chương trình ứng dụng giao tiếp với nguồn tài nguyên do hệ điều hành quản lý
không gian địa chỉ hệ thống và không gian địa chỉ người dùng
- trong các hệ điều hành hiện đại mỗi tiến trình người dùng thực thi trên không gian địa chỉ người dùng, đây là không gian dùng chung giữa các tiến trình người dùng. còn phần nhân hệ thống sẽ được thực thi trên không gian địa chỉ được bảo vệ
=> nó sẽ quy định phần bộ nhớ nào dành riêng cho nhân hệ thống
-sự khác biệt chính của tiến trình cấp hệ thống và tiến trình cấp người dùng là quyền hạn truy cập các tài nguyên quan trọng, ví dụ lệnh gọi thực thi các tác vụ đặc quyền, đọc và ghi các thanh ghi đặc biệt, hoặc truy cập vào vùng nhớ đặc biệt
-sự phân cách giữa các tiến trình giúp cho tiến trình này không bị làm phiền bởi tiến trình khác, còn sự phân biệt giữa tiến trình người dùng và tiến trình hệ thống, các tiến trình người dùng không thể sữa đổi tùy ý vùng nhớ trong vùng nhân hệ thống, hay chèn đoạn mã nguồn vào phần này
-hệ điều hành sẽ cung cấp 1 cơ chế để tiến trình người dùng có thể gọi thực thi 1 số hàm nhất định trong hệ thống . các hàm giao tiếp này được gọi là system calls hoặc là hàm hạt nhân(kernel calls) chúng hoạt động như là cổng giao tiếp với phần nhân của hệ điều hành, các cổng giao tiếp này được thiết kế 1 cách thận trọng để đảm bảo tính an toàn của hệ thống, các hàm giao tiếp này phải kiểm tra cẩn thận các tham số đầu vào cũng như việc di chuyển dữ liệu qua lại giữa các vùng nhớ người dùng và vùng nhớ hệ thống.
đường dẫn vào nhân hệ điều hành
con đường duy nhất để vào nhân hệ điều hành là phải phát sinh 1 sự kiện, các sự kiện sẽ phát sinh 1 trong 3 loai sau: ngắt(interrupt), ngoại lệ(exception), trap(software interrupt). sự kiện này có thể có nguồn gốc từ
-ngắt:ngắt từ thiết bị nhập xuất: khi 1 thiết bị, ví dụ như đĩa cứng CD, bộ nhớ di động hay các thiết bị mạng hoàn thành xong 1 tác vụ đọc ghi, nó sẽ thông báo cho hệ điều hành thông qua 1 lệnh ngắt
-ngắt đồng hồ: các bộ xử lý đếm thời gian, nó có thể phát sinh ngắt sau 1 thời gian nhất định hoặc đếm ngược thời gian để phát sinh ngắt tùy định trong tương lai, dù là loại đồng hồ nào nó cũng có khả năng tạo ngắt để thông báo 1 sự kiện cho bộ xử lý
-ngoại lệ(exceptions)khi 1 lệnh không thực hiện được giống như chia cho 0, truy xuất vào địa chỉ vùng nhớ không hợp lệ, hoặc bị tràn số thì bộ xử lý sẽ phát sinh lệnh ngắt
-ngắt mềm(traps): là các lệnh do bộ xử lý cung cấp mà chúng có khả năng phát sinh ra lệnh ngắt. các lệnh này thường có tham số là 1 số nguyên nhỏ. ngắt mềm thường được thực hiện khi gọi 1 hàm hệ thống nào đó,ngoài ra chúng có thể chèn vào  tiến trình để tạo  điểm tạm dừng(breakpoint) khi phải chuẩn đoán(debug) chương trình
sau đây là chi tiết của quá trình gọi thực thi 1 tác vụ trong nhân hệ điều hành
1. bước đầu tiên từ tiến trình người dùng đến bộ xử lý sự kiện, bước này tựa như cố tình tạo ra 1 lời gọi hàm hệ thống. khi có 1 sự kiện, giá trị con trỏ lệnh và trạng thái bộ xử  lý được lưu lại trong stack
2.bộ quản lý sự kiện quyết định loại sự kiện nào được phát sinh và gọi hàm hệ thống tương ứng để xử lý cho sự kiện này
3. hệ điều hành lưu lại trạng thái của tiến trình đang gọi thực thi tác vụ trong nhân
4.nhân của hệ điều hành gọi thực thi thủ tục tương ứng theo yêu cầu của tiến trình người dùng, đây mới là công việc chính của 1 lời gọi hàm hệ thống, các bước trước hay sau bước này chỉ là cơ chế cần thiết để dẫn đến 1 hàm hệ thống được thực thi
5.nếu thủ tục đơn giản hệ điều hành có quyền thực hiện nhanh thì hệ thống trả lại kết quả và quyền điều khiển về tiến trình người dùng hiện tại, tuy nhiên nếu cần 1 khoảng thời gian nhất định để hoàn tất tác vụ này thì hệ điều hành sẽ gọi 1 lập lịnh ngắn hạn để nạp tiến trình kế tiếp lên thực hiện
(thực hiện 1 chuyển đổi ngữ cảnh)
6. tiến trình được gọi thực thi được nạp lên bộ nhớ và các thanh ghi  quyền điều khiển được trả về cho tiến trình này và tiến trình tiếp tục thực thi
tiến trình
hàm hệ thống (system calls)
1 trong những ứng dụng quan trọng nhất của ngắt cũng như là 1 trong những điều gây mập mờ cho việc học môn hệ điều hành là việc gọi hàm hệ thống
thao tác trên tiến trình
hệ điều hành cung cấp các thao tác chủ yếu sau đây trên 1 tiến trình
-tạo lập tiến trình(create)
-kết thúc tiến trình(destroy)
-tạm dừng tiến trình(suspend)
-tái kích hoạt tiến trình(resume)
-thay đổi độ ưu tiên tiến trình
tạo lập tiến trình
trong quá trình xử lý, 1 tiến trình có thể tạo lập nhiều tiến trình mới bằng cách sử dụng hệ thống tương ứng(fork, exec trong Unix/linux hay createprocess trong windows). mỗi tiến trình con đến lượt nó lại tạo ra tiến trình mới... quá trình này tiếp tục sẽ tạo ra 1 cây tiến trình
các công việc hệ điều hành cần thực hiện khi tạo lập tiến trình bao gồm
- định danh tiến trình mới phát sinh
-đưa tiến trình vào danh sách quản lý hệ thống
- xác định đô ưu tiên cho tiến trình
-tạo PCB cho tiến trình
- cấp phát tài nguyên ban đầu cho tiến trình
1 tiến trình tạo lập 1 tiến trình con, tiến trình con là 1 bản sao của tiến trình cha(giống hình dáng và cấu trúc điều khiển của tiến trình cha), nhưng khác nhau về định danh tiến trình và trạng thái tiến trình. tiến trình con và cha chạy trên hai vùng nhớ khác nhau và mặc định không có chia sẽ vùng nhớ, thông thường chi phí để tạo nên tiến trình là khá lớn
khi 1 tiến trình tạo ra tiến trình mới, tiến trình ban đầu có thể xử lý theo 1 hay hai cách sau
-tiến trình cha tiếp tục xử lý đồng hành với tiến trình con
- tiến trình chờ đến khi 1 tiến trình con nào đó, hoặc tất cả tiến trình con kết thúc xử lý
các hệ điều hành khác nhau có thể chọn lựa các cách cài đặt khác nhau để thực hiện các thao tác tạo lập tiến trình
-trong Unix có thể dùng hàm fork()(đây là 1 system call) để tạo tiến trình
int pid=fork()
tiến trình con tạo bởi hàm fork() giống hệt tiến trình cha của nó, hàm exec() cũng tạo tiến trình mới, nhưng thường dùng để gọi thực thi 1 chương trình mới, chứ không phải gọi lại chính nó
kết thúc tiến trình
1 tiến trình hoàn tất chỉ thị cuối cùng(sẵn sàng kết  thúc), thì nó sử dụng 1 hàm hệ thống để yêu cầu hệ điều hành giải phóng nó ra khỏi bộ nhớ. đôi khi 1 tiến trình có thể yêu cầu hệ điều hành kết thúc xử lý của 1 tiến trình khác, khi 1 tiến trình kết thúc hệ điều hành yêu cầu xử lý các công việc sau
-thu hồi các tài nguyên hệ thống đã cấp phát cho tiến trình
-hủy tiến trình khỏi tất cả các danh sách quản lý của hệ thống
-hủy bỏ PCB của tiến trình
nhiều hệ điều hành không cho phép tiến trình con tiếp tục tồn tại nếu tiến trình cha kết thúc, trong những hệ thống như thế, hệ điều hành tự động phát sinh 1 loạt các thao tác kết thúc tiến trình con
cấp phát tài nguyên cho tiến trình
khi có nhiều người sử dụng đồng thơi trong hệ thống, hệ điều hành cần phải cấp phát các tài nguyên theo yêu cầu cho mỗi người sử dụng, do tài nguyên hệ thống thường rất giới hạn và có khi không thể chia sẻ, nên hiếm khi tất cả các tài nguyên đồng thời đều được thỏa mãn. vì thế cần phải nghiên cứu 1 phương pháp để chia sẻ 1 số tài nguyên hữu hạn giữa nhiều tiến trình người dùng đồng thời. hệ điều hành quản lý nhiều loại tài nguyên khác nhau(CPU, bộ nhớ chính, các thiết bị ngoại vi...), với mỗi loại cần có 1 cơ chế cấp phát và chiến lược cấp phát hiệu quả, mỗi tài nguyên được  biễu diễn thông qua 1 cấu trúc dữ liệu
-định danh tài nguyên
- trạng thái tài nguyên:phần nào của tài nguyên đã cấp phát cho tiến trình, phần nào còn được sử dụng
-hàng đợi trên 1 tài nguyên:
-bộ cấp phát
giao tiếp giữa các tiến trình
các tiến trình đang thực thi có thể hoạt động độc lập hoặc phối hợp với nhau, 1 tiến trình được coi là độc lập nếu nó không bị tác động hoặc bị tác động hoặc tác động với tiến trình khác, bất kí tiến trình nào không chia sẻ vùng nhớ với tiến trình khác được gọi là 1 tiến trình độc lập, nếu tiến trình có chia sẻ vùng nhớ với tiến trình khác thì chúng đang phối hợp hoạt động. sau đây là các lý do để các tiến trình phối hợp hoạt động với nhau
-chia sẽ thông tin
-tăng tốc thực thi
-mô đun hóa
-tiện lợi
sự phối hợp giữa các tiến trình yêu cầu 1 cơ chế giao tiếp giữa các tiến trình, nó cho phép các tiến trình trao đổi dữ liệu và thông tin. có hai mô hình cơ bản trong cơ chế giao tiếp giữa các tiến trình.(1) chia sẻ vùng nhớ, (2) truyền thông điệp, trong mô hình chia sẻ vùng nhớ, 1 vùng bộ nhớ được dành riêng để chia sẻ giữa các tiến trình phối hợp, các tiến trình có thể chia sẻ thông tin bằng cách đọc/ghi lên vùng nhớ chia sẻ này.
=>giao tiếp giữa các tiến trình nói ngắn lại là sự phối hợp và dựa trên 2 cơ chế là chia sẻ vùng nhớ và truyền thông điệp
hệ thống chia sẻ vùng nhớ
-nếu việc giao tiếp giữa các tiến trình sử dụng  mô hình vùng nhớ chung, thì đầu tiên chúng ta phải thiết lập 1 vùng nhớ có thể chia sẻ, thông thường 1 tiến trình A sẽ tạo vùng nhớ chia sẻ trong vùng nhớ mà tiến trình đó được cấp. các tiến trình khác muốn giao tiếp với tiến trình A phải gán thêm địa chỉ vùng nhớ chia sẻ vào không gian địa chỉ của nó. nhắc lại hệ điều hành ngăn chặn các tiến trình khác nhau xâm phạm vùng nhớ của nhau
để minh họa sự hợp tác giữa các tiến trình chúng ta xét bài toán nhà sản xuất và người tiêu thụ, tiến trình sản xuất sẽ sản xuất ra thông tin, chúng sẽ được tiêu dùng bởi tiến trình tiêu thụ, 1 giải pháp cho bài toán này là sử dụng vùng nhớ chia sẻ, để cho phép 2 tiến trình sản xuất và tiêu thụ có thể thực thi đồng thời, chúng ta cần có 1 vùng đệm(buffer). tiến trình sản xuất cố gằng làm dày vùng đệm và tiến trình tiêu thụ cố gắng giải phóng vùng đệm. hai tiến trình được đồng bộ sao cho tiến trình tiêu thụ không giải phóng mẫu tin mà nó chưa sản xuất xong
-có 2 loại buffer có thể được sử dụng, buffer giới hạn kích thước và buffer không giới hạn kích thước, nếu buffer không giới hạn kích thước thì tiến trình tiêu thụ có thể phải đợi 1 mẫu tin mới, nhưng tiến trình sản xuất thì không phải chờ, nếu buffer có kích thước giới hạn, thì tiến trình tiêu thụ phải đợi nếu buffer rỗng, và tiến trình sản xuất phải chờ nếu buffer đầy
hệ thống truyền thông điệp
phương thức truyền thông điệp giúp cho các tiến trình có thể liên lạc với nhau mà không cần phải sử dụng 1 vùng nhớ chung, nhất là trong trường hợp 2 tiến trình ở 2 máy khác nhau. phương thức này phù hợp với môi trường phân tán, hệ điều hành triển khai phương thức này phải cung cấp 2 thủ tục cơ bản: send(message) và receive(message)
giao tiếp tiến trình trên các máy tính khác nhau
chúng ta thảo luận về 3 phương thức phổ biến được giao tiếp giữa các tiến trình trên các máy tính khác nhau
1.sockets
socket là điểm cuối trong quá trình truyền thông. mỗi tiến trình tham gia truyền thông phải có 1 socket. 1 socket được xác định gồm có địa chỉ IP của máy tính và cổng mà nó gắn vào, về tổng quan giao tiếp trên các socket theo mô hình client server. máy server sẽ lắng nghe các yêu cầu từ client tại 1 cổng nào đó, đầu tiên client phải gửi yêu cầu kết nối đến server sau khi thiết lập được kết nối thì client và server có thể truyền dữ liệu qua lại lẫn nhau. các cổng nhỏ hơn 1024 dành cho các dịch vụ chuẩn, cổng 21 là của fpt server, 23 là telnet server, còn 80 là của dịch vụ web
-khi client muốn thiết lập 1 yêu cầu kết nối, nó phải xác định cổng trên máy cá nhân của nó, cổng này là 1 số nào đó thường lớn hơn 1024. 
- tất cả kết nối phải là duy nhất, nghĩa là nếu có 1 tiến trình khác trên máy X muốn kết nối đến web server này thì nó phải dùng 1 cổng khác để liên lạc
- ngôn ngữ java cung cấp 3 loại sockets: connection-oriented (TCP), connectionless (UDP), và multicastsocket. TCP socket đảm bảo truyền dữ liệu đúng toàn bộ bằng cơ chế truyền lại, UDP socket chỉ truyền dữ liệu đúng 1 lần nên có khả năng bị mất gói tin, còn multicastsocket cho phép gửi dữ liệu đến nhiều địa chỉ máy khác nhau cùng lúc

đồng bộ(là đảm bảo nhiều tiến trình phối hợp nhưng không sai lệnh giá trị)

tranh đoạt quyền điều khiển(race condition)
trong hệ điều hành hiện đại các tiến trình thường có sự phối hợp với nhau ví dụ như cùng chia sẻ 1 vùng nhớ chung, hoặc cùng chia sẻ không gian lưu trữ chung, không gian lưu trữ chung có thể là trên bộ nhớ chính hoặc là chia sẻ 1 tập tin trên bộ nhớ ngoài(đĩa cứng....) các tiến trình đồng thời truy cập và sửa đổi các giá trị trên vùng nhớ chung có thể làm giá trị trên vùng nhớ này mất đi tính nhất quán
miền giăng(CRITICAL SECTION)
chìa khóa để ngăn chặn các tình huống như trên có thể xảy ra, khi mà các tiến trình chia sẻ chung 1 vùng nhớ, tập tin hay bất kì tài nguyên dùng chung khác, là phải ngăn chặn các tiến trình đọc và ghi trên vùng chia sẻ cùng 1 thời điểm, bằng cách nào đó mà hệ thống chỉ cho phép 1 tiến trình duy nhất tại 1 thời điểm nhất định đọc và ghi trên vùng dữ liệu chia sẻ, và tất cả các tiến trình khác không được phép đọc ghi trên vùng nhớ chia sẻ, tất là 1 điều cốt lỗi của hệ điều hành hiện đại
các giải pháp busy waiting
trong giải pháp busy waiting các tiến trình bị khóa trước khi vào miền găng phải liên tục kiểm tra trạng thái để biết mình hết bị khóa và có thể vào miền găng. trong giải pháp này có hai nhóm nhỏ 1 là dùng phần mềm 2 là dùng phần cứng
các giải pháp phần mềm
sử dụng cờ hiệu
các tiến trình chia sẻ 1 biến lock chung, biến này được khởi động là 0, nghĩa là miền găng đang trống, tiến trình có thể vào miền găng. như vậy 1 tiến trình muốn vào miền găng trước tiên phải kiểm tra giá trị của biến lock, nếu lock bằng 0 tiến trình đặt lại giá trị cho lock bằng 1 và thực thi miền găng. nếu lock đang nhận giá trị 1, tiến trình phải chờ bên ngoài miền găng cho đến khi lock có giá trị 0
+giải pháp này có thể vi phạm điều kiện 2 tiến trình cùng ở trong miền găng tại 1 thời điểm
kiểm tra luân phiên
đây là giải pháp áp dụng cho hệ thống chỉ có 2 tiến trình, giải pháp này sử dụng 1 biến turn(chỉ định phiên tiến trình nào được phép vào miền găng), biến turn ban đầu gán với giá trị 0, nếu turn bằng 0 tiến trình A được vào miền găng và tiến trình A phải chờ đến khi turn nhận giá trị 0 nếu turn bằng 1 tiến trình B được vào miền găng và tiến trình A phải chờ đến khi turn nhận giá trị 0, khi tiến trình A rời khỏi miền găng nó đặt giá trị turn về 1 để cho phép tiến trình B vào miền găng
giải pháp peterson
áp dụng kết hợp cả hai phương pháp trên
các giải pháp phần cứng
vô hiệu hóa ngắt
một bài toán đơn giản cho bài toán truy cập miền găng là khi 1 tiến trình vào miền găng, nó sẽ cấm hết các ngắt, khi không có ngắt nào có thể phát sinh trong 1 tiến trình, thì CPU không có cơ hội chuyển đổi tiến trình đang thực thi, vì vậy khi các ngắt đã bị vô hiệu hóa, thì tiến trình có thể đọc và ghi lên vùng dữ liệu dùng chung mà không lo lắng có tiến trình nào đó chèn vào
giải pháp này đơn giản nhưng không khả thi khi hệ thống cho phép các tiến trình vô hiệu hóa hết các ngắt, giả sử có 1 tiến trình vô hiệu hóa hết các ngắt và không bật nó lên như vậy hệ thống đã bị tắt
=> ngắt là trả quyền chạy lại cho hệ điều hành
-
ở các khía cạnh khác, giả sử nhân hệ điều hành cấm các ngắt khi đang cập nhật các biến trạng thái của tiến trình, vì nếu ngắt xảy ra thông tin cập nhật này có thể mất chính xác vì nó có thể xảy ra tranh đoạt điều khiển. vì vậy cho phép các tiến trình vô hiệu hóa các ngắt là không phù hợp
chỉ thị TSL(ted and set)
đây là 1 giải pháp có sự trợ giúp của cơ chế phần cứng, nhiều máy tính cung cấp 1 chỉ thị đặc biệt cho phép kiểm tra và cập nhật nội dung 1 vùng nhớ trong 1 thao tác không thể phân chia
- rất nhiều máy tính, đặc biệt là máy nhiều bộ xử lý, có lệnh TSL
TSL, RX, LOCK
-nó đọc lệnh LOCK gán vào thanh ghi RX, rồi ghi giá trị 1 vào biến LOCK, hệ thống đảm bảo hệ thống đọc và ghi này là không thể phân chia, CPU đang thực thi lệnh TSL sẽ khóa bus bộ nhớ lại và không CPU nào khác có thể truy cập vào bộ nhớ cho đên khi công việc được hoàn thành
-để sử dụng lệnh TLS trong đồng bộ, các tiến trình phải dùng chung 1 biến LOCK, khi LOCK =0 thì tiến trình có thể đặt lại giá trị nó thành 1 và  vào miền găng, khi thực thi xong nó sẽ gán lại LOCK=0
các bài toán đồng bộ cổ điển
buổi ăn tối của các triết gia
năm 1965, dijkstra giới thiệu bài buổi ăn tối của các triết gia. kể từ đó, có 1 phương pháp đồng bộ mới, thì nó phải được kiểm tra thử với bài toán này để kiểm tra tính đúng đắn cũng như các ưu điểm của 1 giải pháp mới

điều phối(xem tiến trình nào sử dụng CPU trước, xem đến lượt tiến trình nào thực thi và sắp xếp)

trong hệ thống đa chương, thường xuyên có nhiều tiến trình tranh giành CPU tại 1 thời điểm. tình trạng này xảy ra khi 1 hoặc nhiều tiến trình đồng thời ở trạng thái "ready". nếu hệ thống chỉ có 1 CPU thì hệ thống phải chọn lựa tiến trình nào được sử dụng CPU trước. bộ phận trong hệ điều hành thực hiện lựa chọn này gọi là bộ điều phối(scheduler) và thuật toán sử dụng được gọi là thuật toán điều phối. có nhiều giải pháp cho việc điều phối tiến trình, các giải pháp có những khác biệt nhất định
đặc tính của tiến trình
hầu hết tất cả các tiến trình đều luân phiên giữa việc dùng CPU để tính toán và việc chờ 1 yêu cầu nhập xuất. thông thường chỉ thực thi liên tục 1 thời gian, thì xảy ra yêu cầu đọc ghi tập tin. khi hàm đọc ghi của hệ thống được thực thi xong thì CPU thực thi trở lại cho đến khi nó cần đọc ghi dữ liệu kế tiếp
- tiến trình chiếm CPU đa số thời gian, vì vậy còn được gọi là compute-bound. tiến trình hầu hết là thời gian là đợi nhập xuất, loại tiến trình được gọi là I/O-bound.
-chúng ta cũng nên chú ý rằng càng ngày tốc độ xử lý của CPU được cải tiến rất nhanh so với tốc độ đọc ghi trên thiết bị lưu trữ ngoài, vì vậy càng nhiều tiến trình I/O bound. điều này kéo theo việc điều phối các tiến trình I/O bound ngày càng quan trọng trong tương lai gần
thời điểm điều phối
1 số tình huống mà hệ thống cần phải thực hiện điều phối tiến trình
-tình huống thứ nhất là khi 1 tiến trình được tạo mới, bộ điều phối phải xác định tiến trình cha hay tiến trình con được thực thi, vì lúc này cả hai tiến trình đang ở trạng thái "ready"
-tình huống thứ 2 là khi 1 tiến trình kết thúc, hệ thống phải chọn lựa tiến trình nào thực thi tiếp
-tình huống thứ 3 là khi 1 tiến trình đang bị khóa bởi chờ đợi nhập xuất hoặc semaphore
-tình huống thứ 4, là khi có ngắt nhập xuất. nếu như ngắt nhập xuất đã hoàn thành công việc thì bộ điều phối có thể chọn tiến trình đang đợi thực hiện các công việc nhập xuất
các thuật toán điều phối có thể chia thành 2 nhóm chính: nhóm độc quyền(non-preemptive) và nhóm không độc quyền(preemptive), ở nhóm thứ nhất, khi tiến trình được phép sử dụng CPU thì nó liên tục được thực thi cho đến khi nó trả lại CPU, hoặc là nó vào trạng thái khóa vì phải đợi 1 tác vụ nhập xuất, ở nhóm thứ 2 nhóm không độc quyền, bộ điều phối chia thời gian thành những đoạn nhất định, khi 1 tiến trình thực thi hết khoảng thời gian dành cho nó thì hệ thống tạm ngừng tiến trình này và dành CPU cho tiến trình khác trong hàng đợi
phân loại điều phối
các hệ điều hành khác nhau có những mục tiêu khác nhau, vì vậy hệ điều phối cũng có cách tiếp cận khác nhau. 3 phân loại hệ điều hành đáng chú ý nhất là
1. hệ thống xử lý theo lô
2. hệ thống tương tác
3. hệ thống thời gian thực
-trong hệ thống xử lý theo lô, người dùng không đặt có kết quả nhanh chóng tức thời, vì vậy thuật toán điều phối độc quyền, hoặc là không độc quyền với thời gian dài là chấp nhận được
-trong hệ thống tương tác, thì điều phối không độc quyền là cần thiết, vì hệ thống này người dùng cần có sự phản hồi hệ thống 1 cách nhanh chóng, vì vậy chúng ta không để cho 1 tiến trình nào đó có thể chiếm CPU quá lâu
-trong hệ thống thời gian thực, điều phối không độc quyền đôi khi không cần thiết bởi vì tiến trình trong hệ thống này thường thực thi không quá lâu, kết quả của 1 tiến trình trong hệ thống này thường là đầu vào cho các tiến trình khác
mục tiêu của thuật toán điều phối
ngoài mục tiêu chung cho tất cả hệ thống, thì mỗi hệ thống riêng biệt cần có mục tiêu riêng
mục tiêu chung cho tất cả hệ thống
- công bằng- cho các tiến trình chia sẻ CPU công bằng
- hiệu quả- các phần của hệ thống luôn bận rộn
hệ thống xử lý theo lô
+thông lượng(throughput): tăng tối đa số công việc có thể hoàn thành mỗi giờ
+thời gian hoàn thành(turn around time)giảm tối thiểu thời gian từ khi công việc được gửi vào đến khi hoàn thành
+tận dụng CPU- giữ CPU được sử dụng liên tục
hệ thống tương tác
+hệ thống thời gian phản hồi - phản ánh nhanh chóng cho mỗi yêu cầu
+thỏa mã được sử mong đợi của người dùng
hệ thống thời gian thực
+hoàn thành đúng hạn-tránh mất dữ liệu
+có thể dự đoán được- tránh các trường hợp phải giảm chất lượng để mà đảm bảo đúng hạn