Giáo trình Hệ điều hành - Trường Đại học Sư phạm Kỹ thuật Hưng Yên
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA CÔNG NGHỆ THÔNG TIN
ĐỀ CƯƠNG MÔN HỌC
HỆ ĐIỀU HÀNH
PHẠM NGỌC HƯNG
Năm 2004
Đề cương môn học HỆ ĐIỀU HÀNH
Chương I
GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH
1.1. Giới thiệu
1.1.1. Khái niệm hệ điều hành
Hệ điều hành là một phần quan trọng của hầu hết các hệ thống máy
tính. Một hệ thống máy tính có thể chia thành 4 thành phần: phần cứng, hệ
điều hành, các chương trình ứng dụng và người sử dụng.
Phần cứng bao gồm bộ xử lý trung tâm (CPU), bộ nhớ và các thiết bị vào
ra - cung cấp các tài nguyên tính toán cơ bản. Các chương trình ứng dụng như
bộ xử lý từ, bảng tính, trình duyệt web - định nghĩa cách mà tài nguyên sẽ
được xử lý để đáp ứng yêu cầu của người sử dụng. Hệ điều hành điều khiển và
phối hợp người sử dụng với phần cứng máy tính với các chương trình ứng dụng
khác nhau cho những người sử dụng khác nhau.
Các thành phần của hệ thống máy tính là phần cứng, phần mềm, dữ
liệu. Hệ điều hành cung cấp phương thức để xử dụng một cách đúng đắn, hợp
lý các tài nguyên đó để điều hành hệ thống. Hệ điều hành cũng tương tự như
một chính phủ. Nó không tự mình làm mọi việc mà chỉ đơn giản là tạo ra môi
trường để các chương trình ứng dụng khác làm việc một cách có hiệu quả. Hệ
điều hành có thể được mở rộng theo hai quan điểm: theo cách nhìn của người
sử dụng và theo quan điểm hệ thống.
Hầu hết người sử dụng đều ngồi trước một máy tính cá nhân bao gồm
một màn hình, bàn phím, chuột và bộ xử lý trung tâm. Trong trường hợp này,
hệ điều hành được thiết kế chủ yếu sao cho dễ sử dụng. Một số người dùng sử
dụng các thiết bị đầu cuối để kết nối tới các máy tính lớn (mainframe) hoặc
máy tính nhỏ (minicomputer), cùng chia sẻ tài nguyên và trao đổi dữ liệu thì hệ
điều hành được thiết kế sao cho khai thác được tối đa tài nguyên, đạt hiệu quả
cao nhất.
Theo quan điểm hệ thống, hệ điều hành là công cụ phân phối tài
nguyên. Một hệ thống máy tính có nhiều tài nguyên như: thời gian CPU, bộ
nhớ, thiết bị lưu trữ ngoài, thiết bị vào ra,... Hệ điều hành đóng vai trò quản lý,
2
Đề cương môn học HỆ ĐIỀU HÀNH
phân phối các tài nguyên đó sao cho chúng được sử dụng một cách hợp lý,
tránh được các tranh chấp, ngăn ngừa các lỗi phát sinh.
Tóm lại, chúng ta không có một định nghĩa hoàn chỉnh về hệ điều hành
mà chỉ có thể định nghĩa hệ điều hành một cách tương đối theo các quan điểm
khác nhau.
Các mục tiêu của hệ điều hành..........
1.1.2. Giới thiệu các hệ thống tính toán
1.1.2.1. Các hệ thống máy tính lớn
Các hệ thống Mainframe là các hệ thống máy tính đầu tiên được sử dụng
để giải quyết nhiều bài toán kinh tế, khoa học kỹ thuật.
a. Hệ thống xử lý gói
Đây là những hệ thống ra đời sớm, chúng có kích thước khổng lồ và
được điều khiển từ một bàn giao tiếp người máy (console). Thiết bị vào cơ bản
là các đầu đọc thẻ và ổ băng từ. Đầu ra là các máy in dòng, ổ băng từ và thẻ
đục lỗ. Người sử dụng không tương tác trực tiếp với hệ thống máy tính. Người
dùng chuẩn bị các chương trình, các nhiệm vụ và chuyển đến người điều hành
để nạp vào hệ thống sử dụng băng đục lỗ.
Hệ điều hành cho các thế hệ máy này cũng thực sử đơn giản. Nhiệm vụ
chủ yếu của nó là chuyển đổi các điều khiển một cách tự động từ công việc này
đến công việc kế tiếp. Hệ điều hành luôn luôn thường trực trong bộ nhớ.
Để tăng tốc độ xử lý, người điều hành thường gom các công việc giống
nhau thành nhóm và chạy nó một lượt.
Trong môi trường tính toán này, CPU thường nhàn rỗi, bởi vì tốc độ nhập
xuất chậm hơn rất nhiều so với tốc độ xử lý của CPU. Ngay cả với một CPU
chậm nó cũng xử lý khoảng thời gian mini giây (hàng nghìn lệnh được thực
hiện trong một giây), trong khi đó, một máy đọc thẻ nhanh cũng chỉ có thể đọc
được 1200 thẻ mỗi phút.
b. Hệ thống đa chương trình
Trong thực tế, nhìn chung một người dùng không thể làm cho bộ xử lý
và các thiết bị vào ra làm việc một cách liên tục được. Để khỏi lãng phí tài
nguyên của hệ thống (thời gian của CPU, thiết bị nhập xuất) là phải làm sao để
CPU và các thiết bị nhập xuất luôn luôn làm việc. Đa chương trình sẽ gia tăng
3
Đề cương môn học HỆ ĐIỀU HÀNH
hiệu quả làm việc của máy tính bằng cách tổ chức các công việc một cách hợp
lý để CPU luôn luôn xử lý.
Hệ điều hành lưu trữ cùng lúc hiều chương trình trong bộ nhớ sau đó lần
lượt thực hiện từng công việc. Trong khi một công việc được xử lý thì công việc
khác tàm chờ đến phiên mình.
c. Hệ thống chia sẻ thời gian
Hệ thống này cung cấp tương tác trực tiếp giữa người và máy.
Cho phép nhiều người sử dụng cùng chia sẻ một máy tính trong cùng
một thời điểm.
Sự dụng việc lập lịch và đa chương trình để cung cấp cho mỗi người
dùng một khoảng thời gian nhỏ.
1.1.2.2. Các hệ thống để bàn
Các máy tính cá nhân xuất hiện vào thập kỷ 70
a. Các hệ thống đa xử lý
Trên hệ thống có nhiều CPU, mỗi CPU có thể thực hiện một công việc
độc lập, không bị ảnh hưởng bởi các CPU khác vì vậy hệ thống này:
- Tăng khả năng thông suốt
- Kinh tế hơn
- Tăng độ tin cậy
b. Các hệ thống phân tán
Các hệ thống phân tán được xây dựng trên cở sở hạ tầng mạng. Các
máy tính được kết nối với nhau thông qua hệ thống mạng. Các công việc, và dữ
liệu có thể được chia thành nhiều phần, mỗi máy tính trong hệ thống đảm
nhiệm một phần công việc. Kết quả các phần tiêng lẻ được hợp lại để cho một
kết quả lớn với hiệu quả làm việc vượt trội so với hệ thông chỉ có một máy tính.
1.1.2.3. Các hệ thống Clustered
Tương tự một hệ thống làm việc song song. Hệ thống này liên kếtnhiều
CPU với nhau để cùng làm việc. Sức mạnh của hệ thống là sức mạnh tổng hợp
của các CPU.
1.1.2.4. Các hệ thống thời gian thực
Hệ thống này thực hiện các công việc bị ràng buộc phải hoàn thành
trong một thời gian thực đã được xác định trước.
4
Đề cương môn học HỆ ĐIỀU HÀNH
1.1.3. Môi trường tính toán
- Môi trường tính toán truyền thống
- Môi trường tính toán dựa trên cở sở Web
- Môi trường tính toán nhúng
1.1.4. Bài tập
1. Các mục tiêu chính của hệ điều hành là gì?
2. Liệt kê 4 bước cần thiết để thực hiện một chương trình
3. Mục tiêu chính của đa chương trình là gì?
4. Sự khác nhau cơ bản giữa các hệ điều hành của máy Mainframe và
các máy PCs
1.2. Cấu trúc hệ thống máy tính
1.2.1. Điều hành hệ thống máy tính
Một máy tính thông thường bao gồm một CPU và một số các điều khiển
thiết bị kết nối với nhau thông qua một bus chung, nó hỗ trợ cho việc truy nhập
đến bộ nhớ được chia sẻ. Mỗi trình điều khiển thiết bị tương ứng với một kiểu
thiết bị (ví dụ như trình điều khiển đĩa, âm thanh, màn hình). CPU và các trình
điều khiển có thể làm việc song song, một trình điều khiển bộ nhớ sẽ cung cấp
chức năng đồng bộ hoá việc truy nhập bộ nhớ.
Một máy tính lúc bắt đầu chạy (khi bật công tắc nguồn hoặc khởi động
lại), nó cần phải có một chương trình khởi động. Chương trình khởi động này
(chương trình bootstrap) thông thường được lưu trong ROM hoặc EEPROM
trong phần cứng của máy tính. Nó khởi động tất cả các bộ phận của hệ thống,
từ các thanh ghi, đến các bộ điều khiển thiết bị, đến bộ nhớ. Chương trình khởi
động này phải biết làm thế nào để nạp hệ điều hành và bắt đầu đưa hệ thống
vào hoạt động. Để đáp ứng yêu cầu này, chương trình khởi động phải tìm và
nạp nhân của hệ điều hành vào bộ nhớ. Nhân hệ điều hành sẽ bắt đầu các xửlý
của mình và chờ đợi các sự kiện xuất hiện.
Các sự kiện thường xuất hiện dưới dạng một tín hiệu ngắt từ phần cứng
hoặc phần mềm. Phần cứng có thể làm phát sinh một ngắt bằng cách gửi một
tín hiệu đến CPU thông qua bus hệ thống. Phần mềm phát sinh ngắt bằng cách
thực hiện một điều khiển đặc biệt được gọi là lời gọi hệ thống (system call).
5
Đề cương môn học HỆ ĐIỀU HÀNH
Trong hệ thống có nhiều ngắt, tương ứng với mỗi ngắt là một số đoạn
mã lệnh thực hiện công việc tương ứng với ngắt được kích hoạt.
Khi CPU bị ngắt, nó sẽ ngưng công việc đang làm ngay lập tức và
chuyển sang thực hiện chương trình phục vụ ngắt tương ứng. Sau khi thực hiện
xong yêu cầu ngắt, CPU lại thực hiện tiếp công việc đang thực hiện dở tại vị trí
dán đoạn bởi ngắt.
Ngắt là một phần quan trọng trong kiến trúc của một máy tính. Với mỗi
máy tính đều được thiết kế sẵn một số ngắt, ngoài ra các ngắt còn được định
nghĩa bởi hệ điều hành và các chương trình ứng dụng. Khi có ngắt, hệ thống
phải ngay lập tức chuyển điều khiển đến chương trình xử lý ngắt tương ứng
càng nhanh càng tốt. Để thuận lợi trong quản lý cũng như xác định các chương
trình xử lý tương ứng với mỗi ngắt người ta định nghĩa ra một bảng chứa địa
chỉ các chương trình xử lý ngắt tương ứng với từng ngắt. Bảng này được gọi là
bảng vector ngắt (Interrupt table). Bảng vector ngắt gồm nhiều phần tử, mỗi
phần tử là một con trỏ, trỏ đến địa chỉ bắt đầu của chương trình xử lý tương
ứng với ngắt đó. Các ngắt được đại diện bởi một con số (gọi là số hiệu ngắt).
Số hiệu ngắt là chỉ số để trỏ đến một phần tử trong bảng viector ngắt. Bảng
vector ngắt thường được lưu ở vùng nhớ thấp. Trong khí đó, các chương trình
xử lý tương ứng lại được lưu ở vùng nhớ cao.
Khi một ngắt được gọi, chương trình xử lý tương ứng với nó sẽ được
thực hiện. trong quá trình thực hiện, chương trình này có thể làm thay đổi
trạng thái hiện tại của hệ thống (trạng thái của chương trình đang bị gián
đoạn) như thay đổi các thanh ghi, ngăn xếp,... Để đảm bảo cho chương trình bị
ngắt có thể thực hiện tiếp sau khi xử lý ngắt xong thì trước khi chương trình xử
lý ngắt được thực hiện, trạng thái của hệ thống cầng được cất giữ và chúng sẽ
được khôi phục lại trước khi thực hiện tiếp chương trình bị gián đoạn.
1.2.2. Kiến trúc vào ra
Như đã đề cập ở phần trước, một máy tính thông thường bao gồm một
CPU và các bộ điều khiển thiết bị được kết nối với nhau thông qua một bus
chung. Mỗi bộ điều khiển thiết bị sẽ đảm nhiệm một thiết bị cụ thể. Trên mỗi
trình điều khiển thiết bị có thể có nhiều thiết bị được nối vào. Ví dụ một trình
điều khiển giao diện máy tính nhỏ SCSI (Small Computer System Interface) có
6
Đề cương môn học HỆ ĐIỀU HÀNH
thể có đến 7 hoặc là nhiều hơn nữa các thiết bị nối vào. Một trình điều khiển
thiết bị duy trì một số vùng lưu trữ trung gian riêng (buffer storage) riêng và
một tập các thanh ghi công dụng chung. Thiết bị điều khiển này đáp ứng cho
việc di chuyển dữ liệu giữa các thiết bị ngoại vi. Kích thước bộ nhớ đệm là khác
nhau tuỳ thuộc vào thiết bị sẽ được điều khiển. Ví dụ kích thước cùng nhớ đệm
của thiết bị điều khiển đĩa là một hoặc nhiều vùng nhớ nhỏ nhất được đánh địa
chỉ trên đĩa được gọi là sector, thông thướng là 512 byte.
Ngắt vào ra
Để bắt đầu điều khiển vào ra, CPU nạp các thanh ghi tương ứng trong
bộ điều khiển thiết bị. Bộ điều khiển thiết bị sẽ kiểm tra nội dung các thanh ghi
để xác định hành động cần thực hiện.
Khi một ngắt xuất hiện, trước hết hệ điều hành xác định xem thiết bị vào
ra nào gây ngắt. Sau đó nó được lập chỉ mục vào trong bảng các ngắt thiết bị
vào ra để xác định trạng thái của thiết bị đó và thay đổi điểm truy nhập để
phản ánh sự cuất hiện của ngắt. Với hầu hết các thiết bị, một tín hiệu ngắt
hoàn thiện một yêu cầu vào ra. Nếu có thêm các yêu cầu trong hàng đợi cho
thiết bị này, hệ điều hành sẽ bắt đầu xử lý các yêu cầu kế tiếp.
Cấu trúc DMA
Việc chuyển đổi dữ liệu từ các thiết bị vào ra thông thường đều qua xử
lý của CPU, điều này làm cho việc truyền dữ liệu diễn ra chậm vì để truyền dữ
liệu cần phải phát sinh ngắt để yêu cầu CPU. CPU phải mất nhiều thời gian để
thực hiện hết các quy trình trong xử lý ngắt. Hơn thế nữa, việc CPU phải dừng
lại để chuyển sang phục vụ chuyển dữ liệu sẽ làm giảm hiệu quả tính toán của
CPU.
Để giải quyết vấn đề này, gải pháp truy nhập trực tiếp bộ nhớ DMA
(Direct Memory Access) được sử dụng để tăng tốc độ cho các hoạt động
chuyển dữ liệu vào, nhất là đối với các thiết bị vào ra tốc độ cao. Sau khi thiết
lập bộ đệm, con trỏ và bộ đếm cho thiết bị vào ra, bộ điều khiển thiết bị sẽ
chuyển một khối dữ liệu trực tiếp đến bộ nhớ mà không ngắt CPU, không cần
tới xử lý của CPU. Chỉ một ngắt duy nhất được tạo ra cho mỗi khối chứ không
phải cho từng byte hay từng word như ở cá thiết bị tốc độ thấp.
7
Đề cương môn học HỆ ĐIỀU HÀNH
Các hoạt động cơ bản của CPU cũng tương tự. Một chương trình người
dùng, hoặc bản thân hệ điều hành có thể yêu cầu truyền dữ liệu. Hệ điều hành
phải tìm một bộ đệm (bộ bộ đệm rỗng cho hoạt động vào hoặc đầy cho hoạt
động ra). Kế đến, một phần của hệ điều hành gọi một bộ điều khiển thiết bị
thiết lập các thanh ghi điều khiển DMA để sử dụng địa chỉ nguồn và địa chỉ đích
phù hợp và độ dài truyền. Tiếp theo bộ điều khiển DMA chỉ thị cho bắt đầu điều
hành vào ra. Trong khi DMA thực hiện việc truyền dữ liệu thì CPU được tự do
để thực hiện các nhiệm vụ khác.
1.2.3. Kiến trúc lưu trữ
Một chương trình máy tính để thực hiện được, nó cần phải được nạp vào
trong bộ nhớ chính (RAM). Bộ nhớ chính là một vùng lưu trữ lớn mà bộ xử lý có
thể truy nhập trực tiếp. Bộ nhớ này là một mảng các từ nhớ (Word). Mỗi từ nhớ
có địa chỉ riêng của nó. Các lệnh được chuyển vào trong các thanh ghi của CPU
để thực hiện. CPU sẽ tự động nạp các lệnh từ bộ nhớ chính vào các thanh ghi
để thực hiện.
Một cách lý tưởng, chúng ta mong muốn chương trình và dữ liệu được
nạp cố định vào bộ nhớ chính, nhưng điều này là không khả thi vì 2 lý do sau:
- Bộ nhớ chính luôn luôn quá nhỏ so với tất cả các yêu cầu của chương
trình vào dữ liệu.
- Dữ liệu sẽ bị mất khi ngắt điện.
Vì vậy, hầu hết các hệ thống máy tính đều cung cấp thiết bị lưu trữ thứ
cấp (Second Storage) để mở rộng bộ nhớ chính. Yêu cầu chính đối với thiết bị
lưu trữ thứ cấp là nó có thể lưu trữ được một khối lượng lớn dữ liệu lâu dài.
Hầu hết các thiết bị lưu trữ thứ cấp là đĩa từ. Nó cung cấp khả năng lưu
trữ cả chương trình và dữ liệu. Hầu hết các chương trình ứng dụng (trình duyệt,
chương trình dịch, bộ xửlý từ, bảng tính,...) đều được lưu vào đĩa cho đến khi
nó được nạp vào bộ nhớ. Nhiều các chương trình sau đó coi đĩa như là nguồn
và đích để lưu trữ thông tin trong quá trình xử lý.
Dù sao đi nữa thì các thiết bị lưu trữ chúng ta vừa mô tả (bao gồm các
thanh ghi, bộ nhớ chính, đĩa từ) chỉ là một trong số nhiều hệ thống lưu trữ. Các
thiết bị lưu trữ này còn có thể là Cache, CD-ROM, băng từ,... Mỗi hệ thống lưu
trữ đều cung cấp các chức năng lưu trữ dữ liệu cho đến khi chúng được dùng
8
Đề cương môn học HỆ ĐIỀU HÀNH
trở lại. Sự khác nhau cơ bản giữa chúng là giá thành, tốc độ, kích thước và độ
ổn định.
Bộ nhớ chính
Bộ nhớ chính và các thanh ghi được thiết kế trong bộ xử lý là thiết bị lưu
trữ chính duy nhất mà bộ xử lý có thể truy nhập trực tiếp đến. Các lệnh máy
lấy địa chỉ bộ nhớ như các tham số chứ không lấy địa chỉ địa chỉ đĩa. Vì vậy, bất
cứ câu lệnh nào cần thực hiện cũng như dữ liệu trước khi được xử lý, chúng
phải ở một trong các thiết bị lưu trữ có thể truy nhập trực tiếp này. Nếu chúng
không ở trong bộ nhớ thì cần phải được nạp vào trước khi CPU cần đến chúng.
Đĩa từ
Đĩa từ là phương tiện lưu trữ cho phép ta lưu trữ lâu dài một khối lượng
lớn thông tin, khi cần có thể đọc lại một cách nhanh chóng nhờ khả năng truy
nhập ngâu nhiên.
Đĩa từ có nhiều lợi khác nhau thể qua các đặc điểm như: cấu tạo, giá
thành, dung lượng, tốc độ ghi đọc, chất liệu,...
Băng từ
Là những thiết bị lưu trữ lâu dài dự trên tính chất nhiễm từ của kim loại
phủ bề mặt băng. Đây là thiết bị có khả năng lưu trữ khối lượng lớn thông tin
nhưng tốc độ truy nhập chậm, phải truy nhập tuần tự, khó bảo quản.
Bộ nhớ Cache
Là bộ nhớ đệm nằm ở vị trí trung gian giữa bộ nhớ chính và CPU. Chúng
có tốc độ truy nhập cao, dung lượng nhỏ dùng cho mục đích lưu lại những dữ
liệu đã được truy nhập để có thể dung lại ở lần sau mà không cần phải truy
nhập bổ nhớ thêm lần nữa. Cách tổ chức này làm gia tăng đáng kể tốc thực
hiện chương trình.
1.2.4. Phân cấp lưu trữ
Các thiết bị lưu trữ có thể phân cấp theo trật tự dưới đây dựa vào tốc độ
và giá cả.
9
Đề cương môn học HỆ ĐIỀU HÀNH
Thanh ghi
Cache
Bộ nhớ
Đĩa quang từ
Đĩa từ
Đĩa quang
Băng từ
Trình tự và sự nối kết các hệ thống nhớ thể hiện như sau:
Đĩa từ
Bộ nhớ
Cache
Thanh
ghi
chính
1.2.5. Bảo vệ bằng phần cứng
Các thế hệ máy tính thời kỳ đầu thiết kế cho một người dùng, lập trình
và điầu hành hệ thống. Khi những người lập trình điều hành máy tính từ một
bàn điều khiển (console), họ phải hoàn thành tất cả các điều khiển qua hệ
thống. Khi hệ điều hành được phát triển, chúng thay cho con người điều hành
hệ thống. Chúng giám sát hoạt động của hệ thống và thực hiện nhiều các chức
năng.
Thêm vào đó, để cải tiến các tiện ích của hệ thống, hệ điều hành bắt
đầu chia sẻ các tài nguyên hệ thống cho một số các chương trình thực hiện một
cách song song. Một chương trình thực hiện việc tính toán, trong khi chương
trình khác lại thực hiện việc vào ra.
Việc chia sẻ này vừa là sự cải tiến nhưng cũng đồng thời làm nảy sinh
các vấn đề. Khi hệ thống chạy mà không chia sẻ tài nguyên thì một lối phát
sinh trong một chương trình chỉ làm ảnh hưởng đến bản thân chương trình đó.
Nhưng với sự chia sẻ, nhiều chương trình có thể bị ảnh hưởng bởi lỗi do một
chương trình gây ra.
Nếu không có cơ chế bảo vệ chống lại một số lỗi, hệ thống phải làm việc
trong chế độ chỉ một chương trình được thực hiện trong một thời điểm hoặc tất
cả các dữ liệu đầu ra đều không đáng tin cậy. Một hệ điều hành được thiết kế
10
Đề cương môn học HỆ ĐIỀU HÀNH
để đảm bảo răng một lỗi của chương trình này không phải là nguyên nhân gây
ra các sai sót cho các chương trình khác.
Nhiều các lỗi chương trình đã được phát hiện bởi phần cứng. Các lỗi này
bình thường được hệ điều hành xử lý. Nếu một chương trình của người sử dụng
bị lỗi theo một cách nào đó - như thực hiện một lệnh sai, truy nhập đến địa chỉ
vùng nhớ không thuộc phạm vi của chương trình - phần cứng sẽ bẫy lỗi đó và
chuyển nó cho hệ điều hành. Bẫy lỗi chuyển điều khiển tới hệ điều hành thông
qua vector ngắt. Khi một chương trình gây lỗi, hệ điều hành phải kết thúc bất
thường chương trình đó. Vấn đề này được xử lý như một yêu cầu kết thúc bất
thường của người dùng. Một thông báo lỗi thích hợp sẽ được tạo ra, và vùng
nhớ của chương trình được xuất ra. Thông thường được ghi vào một file để
người dùng hoặc người lập trình có thể kiểm tra nó, và có thể khắc phục và
khởi động lại chương trình.
Chế độ thực thi kép (Dual Mode Operation)
Để đảm bảo cho các hoạt động bình thường, chứng ta phải bảo vệ hệ
điều hành, các chương trình ứng dụng và dữ liệu khỏi bất cứ chương trình bị lỗi
nào. Hướng giải quyết đưa ra bởi nhiều hệ điều hành là cung cấp các hỗ trợ
phần cứng cho phép nhiều chế độ xử lý khác nhau.
Ít nhất chúng ta cần 2 chế độ xử lý: chế độ người dùng và chế độ giám
sát. Một bit được gọi bit chế độ (mode bit) được them vào phần cứng để xác
định chế độ hiện hành: giám sát (0), người dùng (1). Nhờ vào bit chế độ,
chúng ta có thể phân biệt giữa một nhiệm vụ phía người dùng và một nhiệm vụ
phía quản trị.
Ở thời điểm khởi động, phần cứng bắt đầu bằng chế độ giám sát. Hệ
điều hành được nạp vào và sau đó khởi động các xử lý của người dùng trong
chế độ người dùng. Khi một bẫy hoặc ngắt xuất hiện, hệ thống sẽ chuyển từ
chế độ người dùng sang chế độ giám sát (thay đổi bit chế độ). Vì thế mà hệ
điều hành nắm được quyền điều khiển máy tính. Hệ điều hành luôn luôn
chuyển sang chế độ người dùng trước khi nó trao quyền điều khiển cho một
chương trình người dùng.
Chế độ thực hiện kép (dual mode of operation) cung cấp khả năng bảo
vệ hệ điều hành khỏi những người sử dụng gây lỗi. Chúng ta có thể đạt được
11
Đề cương môn học HỆ ĐIỀU HÀNH
các bảo vệ này bởi việc thiết kế một số lệnh đặc quyền. Phần cứng chỉ cho
phép các lệnh đặc quyền này được thực hiện trong chế độ giám sát. Nếu có thử
thực hiện một lệnh đặc quyền trong chế độ người dùng, phần cứng sẽ không
chấp nhận như một lệnh sai và bấy nó chuyển cho hệ điều hành.
Bảo vệ vào ra
Để ngăn cản người dùng thực hiện các lệnh vào ra gây lỗi, chúng ta phải
định nghĩa tất cả các lệnh vào ra đều là những lệnh đặc quyền, chúng phải
được thực hiện thông qua hệ điều hành. Để hoàn thành được nhiệm vụ bảo vệ
vào ra, chúng ta phải đảm bảo người dùng không bao giờ có thể có được
quyền điều khiển máy tính trong chế độ giám sát.
Khi xem xét một chương trình thực hiện trong chế độ người dùng, ta
thấy nó vẫn có thể chuyển sang chế độ giám sát khi một ngắt hoặc một bẫy lỗi
xuất hiện. Nếu chương trình người dùng thay đổi địa chỉ vector ngắt để nó trỏ
đến phần xử lý của chương trình người dùng thì khi ngắt đặc đáp ứng, quyền
điều khiển sẽ được chuyển cho chương trình người dùng ngay trong chế độ
giám sát. Trong thực tế, có nhiều cách để chương trình người dùng chiếm được
quyền điều khiển hệ thống trong chế độ giám sát. Thêm vào đó, nhiều lỗ hổng
đã bị phát hiện và chúng có thể là lý do khiến cho việc bảo vệ hệ thống bị vô
hiệu hoá. Như vậy, để thực hiện vào ra, một chương trình người dùng phải thực
hiện một lời gọi hệ thống để yêu cầu hệ điều hành thực hiện tác vụ vào ra. Hệ
điều hành thực hiện trong chế độ giám sát, kiểm tra nếu yêu cầu của người
dùng là được phép thì sẽ thực hiện yêu cầu. Sau đó hệ điều hành sẽ trở lại chế
độ người dùng.
Bảo vệ bộ nhớ
Để các đảm bảo cho các xử lý đúng, chúng ta phải bảo vệ các ngắt khỏi
sự thay đổi của chương trình người dùng. Thêm vào đó, chũng ta cũng phải
bảo vệ các dịch vụ ngắt của hệ điều hành khỏi những thay đổi.
Chúng ta đều thấy, việc tiếp theo là chúng ta cần phải bảo vệ bộ nhớ, ít
nhất là cho các vector ngắt và các lệnh phục vụ ngắt của hệ điều hành. Thông
thường thì chúng ta muốn bảo vệ hệ điều hành khỏi các truy nhập của người
dùng và bảo vẹ chương trình của người dùng khỏi sự sâm phạm của những
chương trình khác. Sự bảo vệ này phải được cung cấp bằng phần cứng. Nó có
12
Đề cương môn học HỆ ĐIỀU HÀNH
thể được thực hiện bằng nhiều cách (chi tiết sẽ được thảo luận ở phần sau). Ở
đây, chúng ta có thể nêu ra những xử lý cơ bản có thể làm.
Để cung cấp không gián nhớ cho chương trình, chúng ta cần có khả
năng xác định được phạm vi địa chỉ hợp pháp mà chương trình cso thể truy
nhập và bảo vệ vùng nhớ còn lại. Sự bảo vệ này được thực hiện bằng cách sử
dụng 2 thanh ghi cơ sở và thanh ghi giới hạn. Thanh ghi cơ sở lưu địa chị hợp
pháp nhở nhấtl; thanh ghi giới hạn chứa kích thước của vùng nhớ.
Thanh ghi cơ sở và thanh ghi giới hạn chỉ có thể được nạp bởi hệ điều
hành bằng việc sử dụng các lệnh đặc quyền đặc biệt. Các lệnh đặc quyền chỉ có
thể được thực hiện trong chế độ giám sát, mà chỉ có hệ điều hành mới được
làm việc trong chế độ giám sát nên, chỉ hệ điều hành mới có thể nạp các thanh
ghi cơ sở và thanh ghi giới hạn.
Bảo vệ CPU
Thêm vào việc bảo vệ vào ra và bảo vệ bộ nhớ, chúng ta phải đảm bảo
hệ điều hành duy trì được điều khiển. Chúng ta phải ngăn cản một chương
trình người dùng rơi vào vòng lặp không xác định hoặc không gỏi các dịch vụ
hệ thống và không bao giờ trả lại quyền điều khiển cho hệ điều hành. Để đạt
được mục tiêu này, chúng ta cần phải sử dụng đến một cái đồng hồ. Chiếc
đồng hồ này có thể được thiết lập để ngắt ngang việc xửlý của máy tính sau
một khoảng thời gian chỉ định. Khoảng thời gian này có thể được xác định (ví
dụ 1/60 giây) hoặc thay đổi (ví dụ từ 1 mini giây đến 1 giây). Hệ điều thiết lập
bộ đếm. Cé sau mỗi xung nhịp đồng hồ, bộ đếm sẽ bị giảm đi. Khi bộ đếm đạt
đến 0 thì một ngắt xuất hiện.
Ta có thể sử dụng đồng hồ này để ngăn cản chương trình người dùng
rơi vào tình trạng thực hiện quá lâu. Ví dụ, một chương trình chạy với khoảng
thời gian giới hạn là 7 phút. Bộ đếm của nó có thể khởi đầu từ 420. Cứ sau 1
giây, ngắt đồng hồ sẽ giảm bộ đếm đi 1 đơn vị. Trong khi giá trị bộ đếm vẫn
dương thì quyền điều khiển được trả lại cho chương trình gười dùng. Khi bộ
đếm bắt đầu âm, hệ điều hành sẽ kết thúc chương trình đó do vượt quá thời
gian giới hạn.
Đồng hồ còn có thể được dùng trong hệ thốg chia sẻ thời gian. Ngắt sẽ
xuất hiện cứ sau N mini giây. Trong khoảng N mini giây là thời gian để một
13
Đề cương môn học HỆ ĐIỀU HÀNH
chương trình thực hiện, hết thời gian này, quyền điều khiển sẽ được chuyển
cho chương trình khác. Hệ điều hành sẽ chiếm lấy quyền điều khiển sau mỗi
khoảng thời gian (trước khi chuyển quyền điều khiển cho chương trình tiếp
theo) để nó thực hiện một số công việc “nội trợ” như đếm thời gian thực hiện.
Hệ điều hành đồng thời cũng lưu lại các thanh ghi, các biến cục bộ, các bộ đệm
và thay đổi một số các tham số cho chương trình kế tiếp. Thủ tục này được gọi
là chuyển ngữ cảnh.
1.2.6. Kiến trúc mạng
Có hai kiểu mạng cơ bản là mạng LAN và mạng WAN. Sự khác nhau cơ
bản giữa hai loại mạng này ở phạm vi của chúng.
Mạng LAN (Local Area Network)
Đây là loại mạng có quy mô nhỏ, xuất hiển đầu tiên vào thập kỷ 70.
Mạng này được xây dựng dựa trên các trang thiết bị, phụ kiện mạng đăng
trưng cho mạng cục bộ
Mạng WAN (Wide Area Network)
Là mạng diện rộng với phạm vi có thể trong một tỉnh, một quốc gia hoặc
liên quốc gia và trê toàn thế giới.
Mạng này sử dụng các công nghệ cho phép truyền thông đi xa.
1.2.7. Bài tập
1) Sự khác nhau cơ bản giữa chế độ giám sát và chế độ người dùng
trong cong tác bảo vệ hệ thống cơ bản.
2) Sự khác biệt giữa một bẫy lỗi (trap) và một ngắt là gì? Chức năng sử
dụng của chúng là gì?
3) Kiểu thao tác xử lý nào DMA hữu dụng? Giải thích.
4) Câu lệnh nào sau đây có thể là đặc quyền:
- Thiết lập giá trị đồng hồ
- Đọc xung nhịp
- Xoá bộ nhớ
- Ngắt bỏ các ngắt
- Chuyển đổi từ chế độ người dùng sang chế độ giám sát
14
Đề cương môn học HỆ ĐIỀU HÀNH
5) Một số hệ thống máy tính không cung cấp một chế độ đặc quyền
trong điều hành của phần cứng. Có khả năng xây dựng cơ chế bảo vệ hệ điều
hành cho các máy tính đó hay không? Hãy đưa ra các giải thích cho cả hai
trường hợp có thể và không thể.
6) Một số máy tính trước đây bảo vệ hệ điều hành bằng cách đặt nó vào
một vùng nhớ mà các nhiệm vụ của người dùng cũng như chính bản thân hệ
điều hành cũng không thể thay đổi. Hãy mô tả hai khó khăn có thể xuất hiện
theo lược đồ này.
7) Bảo vệ hệ điều hành là một vấn đề cốt yếu để đảm bảo cho hệ điều
hành làm việc đúng. Cung cấp sẵn khả năng bảo vệ là nguyên nhân triển khai
chế độ thực thi kép, bảo vệ bộ nhớ và đồng hồ kiểm soát chương trình. Để
tăng tối đa tính linh hoạt, đồng thời chúng ta cũng nên giảm bớt sự rắc rối cho
người dùng.
Những chỉ thị lệnh trong danh sách sau đây được bảo vệ một cách bình
thường. Đâu là tập chỉ thị lệnh tối thiểu phải được bảo vệ?
a. Chuyển sang chế độ người dùng
b. Chuyển sang chế độ kiểm soát
c. Đọc từ bộ nhớ kiểm soát
d. Ghi vào bộ nhớ kiểm soát
e. Lấy một chỉ thị lệnh từ bộ nhớ kiểm soát
f. Bật ngắt đồng hồ
g. Tắt ngắt đồng hồ
8) Đưa ra hai lý do giải thích tại sao cache là hưu dụng.
9) Sự khác nhau cơ bản giữa LAN và WAN
10) Cấu hình mạng nào phù hợp nhất cho các môi trường sau:
a. Một tầng ký túc xá
b. Một trường đại học
c. Một bang, tỉnh
d. Một quốc gia
15
Đề cương môn học HỆ ĐIỀU HÀNH
1.3. Cấu trúc hệ điều hành
1.3.1. Các thành phần hệ thống
Quản lý tiến trình (Process Management)
Một chương trình sẽ chẳng có nghĩa gì nếu các lệnh của nó không được
CPU thực hiện. Một tiến trình có thể xuyên suốt quá trình thực hiện của một
chương trình
Một tiến trình cần những tài nguyên - bao gồm thời gian CPU, bộ nhớ,
tệp tin và các thiết bị vào ra - để hoàn thành các tác vụ. Các tài nguyên này sẽ
được cung cấp cho các tiến trình khi chúng được tạo ra hoặc được cấp phát
trong quá trình nó chạy.
Chúng ta cần nhấn mạnh, một chương trình tự nó không phải là một tiến
trình; một chương trình chỉ là một thực thể thụ động, như nội dung của một file
được lưu trên đĩa, trong khi đó, một tiến trình là một thực thể chủ động, với
một bộ đếm chương trình chỉ định câu lệnh kế tiếp sẽ được thực hiện. Việc thực
hiện một tiến trình phải theo một trình từ. CPU thực hiện các chỉ thị của tiến
trình một cách tuần từ, hết lệnh này đến lệnh khác cho đến khi tiến trình hoàn
tất.
Một tiến trình là một phần công việc trong hệ thống. Nói khác đi, hệ
thống là một tập hợp các tiến trình. Một số trong đó là các tiến trình của hệ
điều hành, số còn lại là những tiến trình của người dùng. Tất cả các tiến trình
này có thể được thực hiện song song bởi việc chia sẻ CPU giữa chúng.
Hệ điều hành chịu trách nhiệm về các hoạt động sau đây liên quan đến
công tác quản lý tiến trình:
- Tạo và xoá cả tiến trình người dùng và tiến trình hệ thống
- Ngừng và chạy trở lại các tiến trình
- Cung cấp các kỹ thuật cho việc đồng bộ các tiến trình
- Cung cấp các cơ chế giao tiếp giữa các tiến trình
- Cung cấp các cơ chế cho việc xử lý các deadlock
Chúng ta sẽ thảo luận về các kỹ thuật này ở phần sau.
Quản lý bộ nhớ chính (Main-Memory Management)
Bộ nhớ chính là trung tâm để thực thi của các hệ thống máy tính hiện
đại. Là nới để lưu trữ các mã lệnh, các dữ liệu mà CPU có thể truy nhập trực
16
Đề cương môn học HỆ ĐIỀU HÀNH
tiếp để thực hiện chúng. Một chương trình để có thể thực hiện, chúng cần phải
được ánh xạ vào địa chỉ tuyệt đối và nạp vào bộ nhớ. Khi một chương trình kết
thúc, vúng nhớ do nó chiếm dụng phải được giải phóng để có thể nạp chương
trình khác.
Để cải tiến cả hai tính năng của CPU và tăng tốc độ đáp ứng yêu cầu
người dùng của máy tính, chúng ta cần phải giữ một số chương trình thường
trú trong bộ nhớ. Có nhiều chính sách quản lý bộ nhớ khác nhau, và hiệu quả
của mỗi giải thuật khác nhau lệ thuộc vào từng tính huống cụ thể. Sự lựa chọn
một chiến lược quản lý bộ nhớ cho một hệ thống xác định phụ thuộc vào nhiều
yếu tố - sự đặc biệt trong thiết kế phần cứng của mỗi hệ thống, mỗi giải thuật
cần đến sự hỗ trợ của phần cứng cho nó.
Hệ điều hành chịu trách nhiệm cho các hoạt động sau đây trong liên
quan đến công tác quản lý bộ nhớ:
- Theo dõi những phần bộ nhớ nào đang được sử dụng và bởi ai
- Quyết định tiến trình nào sẽ được nạp vào bộ nhớ khi bộ nhớ còn trống
- Cấp phát và giải phóng bộ nhớ khi cần thiết
Các kỹ thuật quản lý bộ nhớ sẽ được thảo luận kỹ ở phần sau.
Quản lý file
Quản lý file là một trong các thành phần có thể thấy rõ của hệ điều
hành. Máy tính có thể lưu trữ thông tin trên một số kiểu phương tiện lưu trữ
khác nhau. Băng từ, đĩa từ, và đĩa quang là những phương tiện phổ biến nhất.
Mỗi thiết bị này đều có những đặc tính và kiến trúc vật lý riêng. Mỗi môi trường
được điều khiển bởi một thiết bị như bộ điều khiển đia, điều khiển băng từ và
chúng cũng có những đặc tính riêng biệt. Những đặc tính này bao gồm tốc độ
truy nhập, dung lượng, tốc độ truyền dữ liệu và phương pháp truy nhập (tuần
tự hay ngẫu nhiên).
Để thuận lợi cho việc sử dụng hệ thống, hệ điều hành cung cấp một
cách nhìn logíc thống nhất trong việc lưu trữ thông tin. Hệ điều hành trừu
tượng hoá các thông số vật lý của các thiết bị để định nghĩa ra một đơn vị lưu
trữ logic, đó là file. Hệ điều hành ánh xạ các file vào các thiết bị vật lý và truy
nhập đến các file thông qua các thiết bị điều khiển lưu trữ.
17
Đề cương môn học HỆ ĐIỀU HÀNH
Một file bao gồm các thông tin liên quan được định nghĩa bởi người tạo.
Thông thường, các file biểu diễn một chương trình và dữ liệu. File dữ liệu có
thể là file số, ký tự, ký tự số. File có thể có mẫu tuỳ ý (ví dụ như file text) hoặc
theo một định dạng cố định. Một file bao gồm một chuỗi các bits, bytes, dòng
hoặc bản ghi ý nghĩa của nó được định nghĩa bởi người tạo.
Hệ điều hành thực thi các khái niệm trừu tượng về file bằng việc quản lý
các phương tiện lưu trữ, như đĩa, băng từ, và các trình điều khiển chúng. Cùng
với đó, thông thường các files được tổ chức trong các thư mục để thuận tiện
cho sử dụng. Cuối cùng, khi có nhiều người dùng truy nhập đến các files, ta
mong muốn quản lý được từng người và cách mà họ truy nhập đến các files (ví
dụ như đọc, ghi, bổ sung thêm vào file).
Hệ điều hành chịu trách nhiệm thực hiện các công việc sau trong quản lý
file:
- Tạo và xoá các files
- Tạo và xoá các thư mục
- Hỗ trợ các đặc quyền trong quá trình thao tác trên các files và thư mục
- Sao lưu dự phòng các file trên các thiết bị lưu trữ lâu dài
Quản lý vào ra
Một trong các mục tiêu của hệ điều hành là che dấu các tính chất đặc
trưng của từng thiết bị cụ thể đối với người, tạo sự thuận tiện trong quá trình
khai thác các thiết bị. Người dùng không phải biết các yêu cầu kỹ thuật phức
tập của thiết bị. Chỉ các trình điều khiển thiết bị mới phải biết và chúng chịu
trách nhiệm thực hiện các tác vụ phức tạp thay cho người dùng.
Quản lý các thiết bị lưu trữ thư cấp
Một trong các mục tiêu của hệ điều hành là thực thi các chương trình.
Những chương trình này, và dữ liệu mà chúng truy nhập tới phải được lưu trữ
trong bộ nhớ, hoặc thiết bị lưu trữ chính trong khi thực hiện. Vì bộ nhớ chính
quá nhỏ để chứa được tất cả dữ liệu và các chương trình và dữ liệu được lưu
trữ ở đó sẽ mất khi ngắt điện, hệ điều hành phải hỗ trợ các thiết bị lưu trữ thứ
cấp để lưu trữ dự phòng cho bộ nhớ chính. Hầu hết các hệ thống máy tính hiện
đại đều sử dụng các đĩa như là phương tiện lưu trữ trực tuyến chủ yếu cho cả
dữ liệu và chương trình. Hầu hết các chương trình đều được lưu trên đĩa cho
18
Đề cương môn học HỆ ĐIỀU HÀNH
đến khi chúng được nạp vào bộ nhớ, và sau đó sử dụng đĩa như là nguồn và
đích trong quá trình xử lý của chúng.
Hệ điều hành chịu các trách nhiệm sau trong công việc quản lý đĩa:
- Quản lý không gian lưu trữ còn trống
- Phân bổ lưu trữ
- Lập lịch đĩa
Mạng
Một hệ thống phân tán là sự phối hợp các bộ xử lý nhưng không chia sẻ
bộ nhớ, các thiết bị ngoại vi hoặc một cái đồng hồ. Thay vào đó, mỗi bộ xử lý
có bộ nhớ, đồng hồ của riêng nó, và bộ xử lý giao tiếp với một số đường truyền
thông khác, như đường truyền tốc độ cao hoặc mạng máy tính. Bộ xử lý là một
hệ thống phân tán với nhiều kích cỡ và chức năng. Chúng có thể bao gồm bộ vi
xử lý nhỏ, các trạm làm việc, các máy vi tính, máy tính lớn, các hệ thống máy
tính mục tiêu chung.
Các bộ xử lý trong hệ thống kết nối thông qua một mạng truyền thông,
chúng có thể được cấu hình theo nhiều cách khác nhau. Mạng có thể được kết
nối đầy đủ hoặc không đầy đủ. Mạng truyền thông khi thiết kế phải cân nhắc
đến việc tìm đường cho các thông điệp và các chiến lược kết nối, và các vấn đề
tranh chấp và bảo mật.
Hệ thống phân tán cung cấp cho người dùng khả năng truy nhập vào
nhiều nguồn tài nguyên. Việc truy nhập tới một tài nguyên chia sẻ cho phép
tăng tốc độ tính toán, các chức năng được mở rộng và dữ liệu trở lên hữu dụng
và tăng độ tin cậy.
Hệ thống bảo vệ
Nếu một hệ thống có nhiều người dùng cho phép thực thi nhiều tiến trìh
song song thì các tiến trình đó phải được bảo vệ khỏi các hoạt động của của
các tiến trình khác. Để đạt được mục tiêu này, các kỹ thuật đảm bảo các file,
hệ thống nhớ, CPU, và các nguồn tài nguyên chỉ được các tiến trình truy nhập
đến khi chúng được hệ điều hành cho phép.
Ví dụ như, việc đánh địa chỉ bộ nhớ phần cứng phải đảm một tiến trình
chỉ có thể thực hiện trong không gian địa chỉ của nó. Đồng hồ phải đảm bảo
19
Đề cương môn học HỆ ĐIỀU HÀNH
không tiến trình nào chiếm quyền điều khiển CPU mà không trả lại quyền điều
khiển.
Sự bảo vệ là bất cứ kỹ thuật nào nhằm điều khiển việc truy nhập của
một chương trình, một tiến trình, hoặc người sử dụng tới nguồn tài nguyên
được xác định bởi một hệ thống máy tính.
Hệ thống thông dịch lệnh
Một trong những chương trình hệ thống quan trọng cho một hệ điều
hành là chương trình thông dịch lệnh (Command-Interpreter System), tạo ra
một giao diện giữa người sử dụng và hệ điều hành. Một số hệ điều hành gộp cả
hệ thống thông dịch lệnh trong lõi (kernel). Một số hệ điều hành khác, như
DOS và UNIX, coi trình thông dịch lệnh như một chương trình đặc biệt đang
chạy khi một công viêch đã được tiến hành hoặc khi người sử dụng lần đầu tiên
đăng nhập (trong hệ thống chia sẻ thời gian).
Nhiều câu lệnh được chuyển đến hệ điều hành bởi các phát biểu điều
khiển. Khi một công việc mới được bắt đầu trong hệ thống xử lý bó, hoặc khi
người sử dụng đăng nhập vào một hệ thống chia sẻ thời gian, một chương trình
đọc và thông dịch các phát biểu điều khiển một cách tự động. Chương trình này
có khi được gọi bộ thông dịch thẻ điều khiển (control-card interpreter) hoặc bộ
thông dịch dòng lệnh (command-line interpreter), và nó thường được gọi là hệ
vỏ (shell). Chức năng của nó chỉ đơn giản là nhận lệnh kế tiếp và thực thi nó.
Các hệ điều hành thường khác nhau về giao diện, với một bộ thông dịch
lệnh thân thiện hệ thống sẽ càng có được nhiều sự chấp nhận của người dùng.
Một kiểu giao diện thân thiện là dựa trên chuột, cửa sổ và hệ thống thực đơn
trong Macintosh và Microsoft Windows. Chuột được di chuyển để trỏ vào các
hình ảnh, hoặc biểu tượng trên màn hình, nơi thể hiện các chương trình, các
tệp tin và các chức năng hệ thống. Phụ thuộc vào vị trí con trỏ chuột, chỉ cần
nhấn vào một phím chuột là có thể thực thi một chương trình, lựa chọn một tệp
tin hay thư mục, trải ra một thực đơn, nơi chứa đựng các lệnh. Giao diện này
tăng hiệu quả sử dụng, giảm bớt các khó khăn cho người dùng. Một số giao
diện khác khiến người dùng phải nhập lệnh bằng cách gõ phím, kết thúc và yêu
cầu thực hiện lệnh bằng phím ENTER. Giao diện của hệ điều hành MS-DOS và
UNIX là loại giao diện được thực hiện theo cách này.
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ điều hành - Trường Đại học Sư phạm Kỹ thuật Hưng Yên", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- giao_trinh_he_dieu_hanh_truong_dai_hoc_su_pham_ky_thuat_hung.doc