Tài liệu Hệ điều hành (Operating System): 1Hệ điều hành
(Operating System)
PHAN Xuân Huy
{pxhuy@fit.hcmuns.edu.vn}
2Thông tin giới thiệu
Bố cục môn học: 45 LT + 30 TH
Hình thức thi:
Lý thuyết: 7 điểm (Không sử dụng tài liệu)
Thực hành: 3 điểm (Theo qui định của GVHDTH)
Các thắc mắc vui lòng liên hệ:
Phan Xuân Huy – pxhuy@fit.hcmuns.edu.vn
Giáo trình môn học:
Hệ điều hành – Lê Khắc Nhiên Ân – ĐHKHTN Tp.HCM
Hệ điều hành nâng cao - Trần Hạnh Nhi – ĐHKHTN Tp.HCM
3Mục tiêu của môn học: Cung cấp
Các kiến thức cơ bản về HĐH đa nhiệm
Hiểu rõ mô hình tổ chức, nguyên lý hoạt động,
của các thành phần cơ sở của một HĐH hiện đại
Biết cách sử dụng/quản trị các HĐH thông dụng,
khai thác tốt các dịch vụ của HĐH.
4Thảo luận – 1CPU vs nhiều Chương trình
Nhu cầu: Người dùng luôn thích sử dụng HĐH cho phép
chạy vài chương trình đồng thời
Hệ điều hành như thế gọi là gì?
Thực tế: Hầu hết các máy tính chỉ có
một bộ vi xử lý (các máy có >1 CPU
rất đắt tiền)
Làm sao thỏa mãn được nhu cầu người...
417 trang |
Chia sẻ: Khủng Long | Lượt xem: 1515 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Hệ điều hành (Operating System), để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1Hệ điều hành
(Operating System)
PHAN Xuân Huy
{pxhuy@fit.hcmuns.edu.vn}
2Thông tin giới thiệu
Bố cục môn học: 45 LT + 30 TH
Hình thức thi:
Lý thuyết: 7 điểm (Không sử dụng tài liệu)
Thực hành: 3 điểm (Theo qui định của GVHDTH)
Các thắc mắc vui lòng liên hệ:
Phan Xuân Huy – pxhuy@fit.hcmuns.edu.vn
Giáo trình môn học:
Hệ điều hành – Lê Khắc Nhiên Ân – ĐHKHTN Tp.HCM
Hệ điều hành nâng cao - Trần Hạnh Nhi – ĐHKHTN Tp.HCM
3Mục tiêu của môn học: Cung cấp
Các kiến thức cơ bản về HĐH đa nhiệm
Hiểu rõ mô hình tổ chức, nguyên lý hoạt động,
của các thành phần cơ sở của một HĐH hiện đại
Biết cách sử dụng/quản trị các HĐH thông dụng,
khai thác tốt các dịch vụ của HĐH.
4Thảo luận – 1CPU vs nhiều Chương trình
Nhu cầu: Người dùng luôn thích sử dụng HĐH cho phép
chạy vài chương trình đồng thời
Hệ điều hành như thế gọi là gì?
Thực tế: Hầu hết các máy tính chỉ có
một bộ vi xử lý (các máy có >1 CPU
rất đắt tiền)
Làm sao thỏa mãn được nhu cầu người dùng?
Một CPU rõ ràng chỉ có thể chạy được một chương trình
Không thể chia CPU làm nhiều phần như chia bánh được
5Thảo luận – Chia sẻ bộ nhớ
Các chương trình muốn có thể chạy thì trước hết cần phải
được nạp vào trong bộ nhớ chính (RAM).
Khi có nhiều chương trình cùng sử dụng bộ nhớ thì HĐH
sẽ thực hiện việc chia sẻ cho mỗi chương trình không
gian nhớ riêng.
Vấn đề: bộ nhớ RAM thì có hạn (ví dụ 64MB), vậy khi
chạy nhiều chương trình thì ra sao ??? Ví dụ:
Windows XP (lõi) 60MB
Windows Media Player 12MB
Visual Studio .NET 30MB
Làm cách nào mà Windows vẫn chạy được?
6Thảo luận – Chia sẻ card sound
Khi đang nghe nhạc, nếu Windows gặp lỗi, ta có
nghe được tiếng báo lỗi?
Chỉ có các hệ điều hành nhưME, 2000, XP,
Vậy HĐH đã sử dụng giải pháp nào?
Luân phiên?
Tuần tự?
Chia bánh?
Giải pháp khác?
☺Về nhà bạn thử làm cho Windows phát 2 bài
nhạc khác nhau trên 2 loa xem? Có được không?
7Nội dung môn học: gồm 5 chương
Chương 1: Tổng quan về HĐH
Chương 2: Hệ thống quản lý tập tin
Chương 3: Hệ thống quản lý xuất nhập
Chương 4: Quản lý tiến trình
Chương 5: Quản lý bộ nhớ
8Chương 1: Tổng quan về HĐH
Nội dung chương:
Vai trò của Hệ điều hành
Các thành phần của HĐH
Một số kiến trúc HĐH
Quá trình phát triển của HĐH
Một số HĐH hiện đại
9Vai trò của HĐH
Quản trị tài nguyên
Tài nguyên: CPU, RAM, HDD, printer
Đối tượng sử dụng tài nguyên: Chương trình ƯD
Nhiệm vụ: Cung cấp giải thuật cấp phát, quản trị tài nguyên
cho các đối tượng hoạt động.
Mục tiêu:Cấp phát đầy đủ, công bằng, hiệu quả
Điều khiển thiết bị
Nhiệm vụ: Che dấu các chi tiết phần cứng, tạo môi trường dễ
làm việc hơn cho NSD.
Mục tiêu: Tạo sự độc lập thiết bị.
Ví dụ: Làm sao đểMS.Word có thể in được với nhiều loại máy
in khác nhau như in kim, laser, phun của nhiều hãng khác nhau
10
HĐH và các thành phần của hệ thống
11
HĐH và các thành phần của hệ thống
12
Các dịch vụ của hệ thống
Nạp và thi hành chương trình (load & run)
Các thao tác xuất nhập (I/O Operations)
Các thao tác truy xuất/cập nhật hệ thống tập tin
(file system)
Các cơ chế liên lạc/trao đổi thông tin giữa các tác
vụ
Phát hiện/chỉnh sửa lỗi
Æ Giao tiếp giữa các chương trình ứng dụng và HĐH
được thực hiện phần lớn thông qua các lời gọi hệ
thống (System Call)
13
Các thành phần của HĐH
Quản lý tài nguyên là vai trò quan trọng nhất của
HĐH, do đó cần có một số thành quản lý CPU,
quản lý bộ nhớ,
CPU : quản lý tiến trình(bao gồm quản lý CPU)
RAM : quản lý bộ nhớ chính
Input/Output : quản lý nhập/xuất (thấy rõ ở DOS)
Hệ thống tập tin : Quản lý tập tin
Hệ thống bảo vệ
Quản lý mạng
Shell (giao tiếp người dùng)
14
Các thành phần của HĐH
Quaûn lyù tieán trình
Quaûn lyù boä nhôù chính
Quaûn lyù nhaääp xuaát
Quaûn lyù boä nhôù phuï
Heä thoáng taäp tin
Heä thoáng baûo veä
Giao tieáp maïngBoä thoâng dòch leänh
15
Kiến trúc HĐH
Kiến trúc đơn giản
Kiến trúc phân lớp
Kiến trúc máy ảo
Kiến trúc client/server
16
1. Kiến trúc đơn giản
Ví dụ điển hình cho kiến
trúc này là DOS, trong đó
HĐH chỉ làm một số nhiệm
vụ quản lý còn khá đơn
giản và cung cấp thêm một
số dịch vụ.
HĐH = Thư viện hàm.
UD của người dùng vẫn có
thể truy cập trực tiếp đến
phần cứng thông qua
BIOS, cổng phần cứng
Không hỗ trợ đa nhiệm.
Đánh giá khi chương
trình treo?
Ứng dụng
Hệ điều hành (DOS)
Phần cứng (BIOS, port)
Tiện ích thường trú
Ví dụ với HĐH DOS
17
2. Kiến trúc phân lớp
HĐH phân thành nhiều
lớp.Mỗi lớp phụ trách 1
chức năng đặc thù.
Lớp bên trên sử dụng
chức năng do các lớp bên
dưới cung cấp.
Æ Khó xác định số lượng
lớp, thứ tự lớp !!!
Æ Chi phí truyền tham số
xuyên các lớp !!!
18
3. Kiến trúc máy ảo (1/4)
Có nghe đến máy ảo bao giờ? Ví dụ?
Do mục tiêu của HĐH là chạy được nhiều chương trình
đồng thời trên một máy tính nên cách tốt nhất là tạo ra
nhiều máy tính ảo từ một máy tính thật để các chương
trình chạy riêng trên các máy ảo.
Về nguyên tắc các chương trình không biết mình đang
chạy trên máy ảo, cũng không biết mình đang phải chia
sẻ tài nguyên với các chương trình khác. Ví dụ:
CPU ảo: mỗi chương trình* sở hữu một CPU ảo
Bộ nhớ ảo: mỗi chương trình một không gian nhớ riêng
19
3.Kiến trúc máy ảo (2/4)
Non-virtual Machine Virtual Machine
20
3.Kiến trúc máy ảo (3/4)- Ví dụ
Java Virtual Machine
Java OS
Java VM
Operating System
Hardware
Process Process
Java program
• Độc lập với Platform
21
3. Kiến trúc máy ảo (4/4)
Ưu điểm:
Môi trường thuận lợi cho sự tương thích
Tăng tính an toàn cho hệ thống do các VM độc lập
Dễ phát triển các HĐH đơn nhiệm cho các VM độc lập.
Khuyết điểm
Phức tạp trong việc giả lập.
22
4. Kiến trúc client/server
Các dịch vụ của HĐH được chia thành 2 phần:
Server: phần hạt nhân, lệ thuộc phần cứng
Client: các tiện ích hệ thống, sử dụng dịch vụ do
server cung cấp
23
Giới thiệu các dòng HĐH hiện đại
Dòng HĐH Windows
Quá trình phát triển
Các phiên bản chính
Dòng HĐH Unix/Linux
Quá trình phát triển
Các distro chính
24
Dòng HĐH Windows
Phát triển bởi Microsoft.
Hiện đang chiếm 80% Æ 90% thị trường HĐH.
Số lượng dòng mã chương trình:
WinNT: 4 triệu
Win2000: 35 triệu
WinXP: 40 triệu
25
Quá trình phát triển của dòng
HĐH Windows (1/4)
Windows 1.0 – Phát hành 12/1985
Windows 2.0
Phát hành 1987
Chỉ hổ trợ bộ vi xử lý Intel 8086 hoặc 8088
Có thể truy cập 1MB bộ nhớ
Windows 3.0
Phát hành 05/1990
Có thể truy cập 16MB bộ nhớ
26
Quá trình phát triển của dòng
HĐH Windows (2/4)
Windows 3.1
Phát hành 04/1992
Hỗ trợ TrueType fonts/ Multimedia
Windows NT
Phát hành 07/1993
Hỗ trợ chíp Intel 386, 486 và các chíp khác không của
Pentium
Là hệ điều hành dòng server đầu tiên
Là HĐH đầu tiên hỗ trợ các ỨD 32 bits
27
Quá trình phát triển của dòng
HĐH Windows (2/4)
Windows 95
Phát hành 08/1995
Cũng hỗ trợ các ứng dụng 32-bit (nhưng vẫn tương thích với
các ƯD 16 bits
Windows 98
Phát hành 06/1998
Tăng cường về mặt hiệu năng và hỗ trợ phần cứng tốt hơn
Tích hợp các tính năng Internet
Windows Millennium
Phát hành 12/2000
Là phiên bản destop hỗ trợ tốt multimedia.
28
Quá trình phát triển của dòng
HĐH Windows (4/4)
Windows 2000
Phát hành 01/2000
Hỗ trợ tính đa xử lý đối xứng : 2-32 CPU.
Hỗ trợ đầy đủ tính năng đa ngôn ngữ (UNICODE)
Tính hợp đầy đủ các chồng giao thức mạng thông dụng
Thuộc dòng HĐH server chuyên dụng.
Các dòng sản phẩm: Windows 2000 Professional, Windows
2000 Server, Windows 2000 Advanced Server, Windows 2000
Datacenter Server
Windows 2003
Windows Longhorn
Hỗ trợ ƯD 64 bits
29
Quá trình phát triển của dòng
HĐH Linux (1/2)
1969: UNIX, Thompson & Ritchie (AT&T Bell Lab)
1987: Minix, Andy Tanenbaum
1991: birth of Linux
Minix-like OS by Linus Torvard
limited devices, no networking
1994: Linux 1.0
only single-processor i386
networking (Internet)
enhanced file system (ext2)
1995: Linux 1.2
more hardware
8086 mode (DOS emulation) included
Support other architecture:Sparc, Alpha, MIPS
30
Quá trình phát triển của dòng
HĐH Linux (2/2)
1996: Linux 2.0
multiple architectures, multiple processors
threads, memory management
1999: Linux 2.2
2001: Linux 2.4
ISA PnP, USB,
12/2003: Linux 2.6
31
Các distro chính của HĐH Linux
Mandrake
Fedora/Redhat
Debian
SUSE
Gentoo
32
Các đặc điểm chính của Linux
Là HĐH tương tự Unix.
Là HĐH mã nguồn mở
Bao gồm khoảng 6 triệu dòng mã (kernel v2.6)
Tăng trưởng khoảng 25%/năm từ năm 2003
Chiếm khoảng 10% thị trường HĐH.
1Chương 2: Quản lý xuất nhập
Nhiệm vụ của bộ phận quản lý xuất nhập
Các thiết bị xuất nhập
Mô hình phân lớp trong quản lý xuất nhập
Bộ điều khiển thiết bị (device controller)
Trình điều khiển thiết bị (device driver)
Cơ chế DMA
Quản lý lỗi và bảo vệ quá trình xuất nhập
2Nhiệm vụ
Mục tiêu của bộ phận quản lý xuất nhập
Giới thiệu lớp trừu tượng và độc lập thiết bị
Che giấu các chi tiết kỹ thuật của các thiết bị phần cứng.
Quản lý và sửa lỗi.
Làm cho các thiết bị phần cứng đơn giản và dễ dùng.
Cho phép chia sẻ các thiết bị phần cứng
Xây dựng các cơ chế bảo vệ các thiết bị được chia sẻ.
Điều phối thiết bị để phục vụ cho cùng lúc nhiều nhu cầu sử
dụng.
3Ví dụ về các thiết bị xuất nhập
Các thiết bị giao tiếp:
Các thiết bị chỉ nhập : bàn phím, chuột, joystick
Các thiết bị chỉ xuất : màn hình, máy in
Các thiết bị vừa nhập vừa xuất: card mạng.
Các thiết bị lưu trữ
Thiết bị vừa xuất, vừa nhập: đĩa (cứng/mềm), băng từ
Thiết bị chỉ xuất: CD-ROM.
4Phân loại các thiết bị nhập xuất
Phân loại theo mục đích sử dụng:
Các thiết bị giao tiếp:
Các thiết bị chỉ nhập : bàn phím, chuột, joystick
Các thiết bị chỉ xuất : màn hình, máy in
Các thiết bị vừa nhập vừa xuất: card mạng.
Các thiết bị lưu trữ
Thiết bị vừa xuất, vừa nhập: đĩa (cứng/mềm), băng từ
Thiết bị chỉ xuất: CD-ROM
Phân loại theo phương pháp truy xuất:
Thiết bị khối:
Tổ chức theo từng khối riêng biệt và truy xuất ngẫu nhiên.
Thiết bị tuần tự
Gởi nhận theo chuỗi bít và phải truy xuất tuần tự.
5Phân loại các thiết bị nhập xuất (tt)
HĐH phải gom nhóm các thiết bị khác nhau thành những
nhóm cơ bản để dễ dàng quản lý:
Storage
Hard drives, Tapes, CDROM
Networking
Ethernet, radio, serial line
Multimedia
DVD, Camera, microphones
HĐH phải cung cấp các phương thức nhất quán để truy
cập các nhóm đối tượng trên. Nếu không, lập trình sẽ rất
khó khăn
6Các phương thức truy cập IO
Sử dụng chung thư viện giao tiếp cho nhiều thiết bị khác
nhau
Ví dụ , với HĐH Unix, sử dụng 4 phương thức chính:
open()
close()
read()
write()
Các phương thức này là các system calls được cung cấp
bởi HĐH để cho phép các ứng dụng chúng tương tác với
các thiết bị xuất nhập.
7Các phương thức IO của Unix
fileHandle = open(pathName, flags, mode)
filehandle: là một số nguyên, dùng để thao tác với tập tin hay
thiết bị
pathname: tên trong hệ thống file. Trong Unix, các thiết bị đặt
dưới thư mục /dev.
E.g. /dev/ttya là serial port đầu tiên, /dev/sda: là SCSI drive
đầu tiên
flags: blocking hoặc là non-blocking
mode: read only, read/write, append
errorCode = close(fileHandle)
Kernel sẽ giải phóng các biến lưu trữ cho thiết bị
8Các phương thức IO của Unix (tt)
byteCount = read(fileHandle, byte [] buf, count)
Đọc count bytes từ thiết bị và lưu trong buffer buf.
Chương trình người dùng phải kiểm tra byteCount để biết số
byte thật sự đọc được.
byteCount < 0 thì là báo lỗi (xem mã lỗi)
byteCount = write(fileHandle, byte [] buf, count)
Ghi count byte từ buf vào thiết bị
Số byte thật sự ghi được lưu trong byteCount
byteCount âm là bị lỗi
9Các đặc tính xuất nhập
Ba đặc tính khác nhau cần xem xét khi xử lý 1 thao tác
nhập xuất:
blocking vs. non-blocking
buffered vs. unbuffered
synchronous vs. asynchronous
10
Blocking vs. Non-Blocking I/O
Blocking – ứng dụng dừng lại cho đến khi số count bytes
được đọc hoặc ghi
Ví dụ: Trong thiết bị mạng, nếu muốn ghi 1000 bytes, thì HĐH
ghi tất cả các byte cho đến khi ghi hoàn tất.
Nếu thiết bị không thể thực hiện lệnh ghi được (ví dụ hỏng dây
nối), làm sao? Thì sẽ kết thúc và trả về số bytes đã ghi được.
Nonblocking – HĐH đọc và ghi các bytes khi có thể,
không cần ứng dụng phải dừng lại.
11
Buffered vs. Unbuffered I/O
Trong trường hợp buffer dữ liệu của thiết bị quá nhỏ, để
không phải chờ quá lâu khi thực hiện IO
buffered I/O cho phép kernel copy lại dữ liệu
Bên write(): cho phép ứng dụng tiếp tục ghi dữ liệu
Bên read(): khi thiết bị báo có dự liệu đến, kernel chép dữ liệu
vào buffer. Khi tiến trình gọi read(), kernel chỉ việc copy từ
buffer.
Khuyết điểm buffered I/O?
Thêm chi phí để thực hiện copy
Chậm trễ việc gửi dữ liệu
12
Synchronous vs. Asynchronous I/O
Synchronous I/O: các xử lý khác của ứng dụng của người
dùng cuối sẽ dừng lại để chờ các thao tác xuất nhập của
nó hoàn tất.
Asynchronous I/O: các xử lý khác của ứng dụng có thể
thực thi song song với các thao tác xuất nhập
13
Các loại thiết bị xuất nhập
Hầu hết HĐH chia thành 3 nhóm thiết bị:
Thiết bị đọc theo kí tự (character device)
Dùng cho các thiết bị tuần tự (v.d. USB port, bàn phím,
modem)
Thiết bị mạng
Dùng cho các card mạng (v.d. Ethernet card)
Thiết bị theo block:
Dùng cho các bộ lưu trữ lớn (v.d.ổ đĩa và CDROM)
Phương thức read/write sẽ khác nhau với từng loại
14
Thiết bị xuất nhập theo kí tự
HĐH đọc và ghi theo chuỗi các byte
System call write() sẽ ghi từng byte ra thiết bị
System call read() sẽ đọc từng byte ra thiết bị
Không có điều khiển tỉ lệ read/write, bên gửi có thể gọi
system
call write() 1 lần 1000 bytes, bên nhận có thể gọi read 1000 lần,
mỗi lần đọc 1 byte.
15
Thiết bị mạng
Unix và Windows đều dùng khái niệm socket để cho việc
truyền, nhận dữ liệu trên mạng
Mỗi write() hoặc là gửi cả block, kích thước của block có giới
hạn tùy hệ thống.
Bên nhận, read() trả về tất cả các byte trong block.
16
Thiết bị đọc theo block
HĐH đọc và ghi thiết bị theo các block
Mỗi block kích thước xác định (thông thường 1KB - 8KB)
Người dùng chỉ có thể read/write các block cùng kích thước
Không giống thiết bị khác, thiết bị đọc ghi theo block hỗ trợ
random access
Chúng ta có thể đọc/ghi bất cứ block nào trên thiết bị, không cần
phải ‘đọc tất cả các bytes’ trước
Làm sao xác định vị trí của block thứ n?
17
Con trỏ file
Một con trỏ file được gán vào một file đang mở, nếu như thiết bị
đang mở thuộc loại đọc theo block
Con trỏ file sẽ trỏ tới vị trí hiện hành trên file cho lệnh đọc/ghi kế
tiếp
Đơn vị của con trỏ file là byte, chứ không phải block
Di chuyển con trỏ file:
absoluteOffset = lseek(fileHandle, offset, whence);
whence xác định vị trí cột mốc, đầu file, cuối file
Vị trí hiện hành được trả về, <0 là lỗi
Vị trí hiện hành là 1 số nguyên tính theo byte, có thể là bội số
của block.
18
Thiết bị xuất nhập
Màn hình: Thiết bị xuất
chuẩn:
Ký tự hay đồ hoạ
Khả năng hiển thị:
Độ phân giải:
Ví dụ : 25 x 80 ký tự
hay 800 x 600 x 256
màu.
Độ làm tươi:
30-60 lần/giây.
19
Thiết bị xuất nhập
Bàn phím: Thiết bị nhập chuẩn
Bố trí theo cấu trúc “QWERTY”
Tốc độ nhập dữ liệu chậm (<10 ký tự/giây)
Thiết bị trỏ/định vị: Thiết bị nhập chuẩn
Chuột (quang, cơ)
Trackball
Joystick
Tốc độ nhập dữ liệu chậm (vài trăm bytes/giây)
20
Thiết bị xuất nhập
Máy in
Máy in dòng, máy in điểm, máy in phun, in laser.
Tốc độ đẩy dữ liệu chậm
Hướng ký tự
Máy quét
Số hoá các tài liệu in thành các dữ liệu số dưới
dạng ảnh bitmap.
Tốc độ quét chậm
21
Thiết bị xuất nhập
Đĩa từ : Đĩa mềm (floppy disk), đĩa cứng (hard disk):
Thiết bị xuất nhập theo khối (sector).
Dung lượng tuỳ thuộc vào số head,track,sector.
Tốc độ truy cập phụ thuộc vào tốc độ quay và mật độ dữ liệu
trên đĩa.
Băng từ:
Thiết bị truy cập tuần tự dung lượng lớn.
Tốc độ truy cập ~2Mb/s
CDROM/DVD:
Tốc độ truy cập nhanh.
Dung lượng ngày càng lớn và giá thành ngày càng rẻ.
22
Thiết bị xuất nhập
Thiết bị giao tiếp mạng
Card mạng
Cài đặt các giao thức mạng khác nhau để hỗ trợ cho quá
trình truyền nhận các luồng/gói dữ liệu.
Modem
Chuyển đổi giữa tín hiệu tuần tự và tín hiệu số trên đường
truyền thoại.
Luồng dữ liệu truyền là các dãy bít được gom nhóm thành
các ký tự.
Đồng hồ hệ thống (clock) và bộ định giờ (timer)
Cung cấp thời gian hệ thống để giúp đồng bộ hoá các
hoạt động trên máy tính.
23
Bộ điều khiển thiết bị
Mỗi đơn vị nhập xuất thường gồm 2 thành phần:
Thành phần cơ: Bản thân thiết bị
Thành phần điện: bộ điều khiển (controller)
Bộ điều khiển:
Chức năng: Trung gian giao tiếp giữa thiết bị và HĐH.
Phương tiện giao tiếp: Thông qua bus - hệ thống mạch truyền
dẫn.
Công việc:
Nhận lệnh từ HĐH để thực hiện và báo hiệu cho HĐH khi tác
vụ hoàn tất.
Chuyển đổi dãy bit thành các byte và đặt chúng vào trong bộ
đệm (buffer) của bộ điều khiển.
24
Các thiết bị xuất nhập và bus hệ thống
25
Địa chỉ giao tiếp thiết bị
HĐH giao tiếp với thiết bị thông qua địa chỉ xuất nhập
của bộ điều khiển:
26
Mô hình phân lớp trong quản lý xuất nhập
Hệ thống xuất nhập được tổ chức theo từng lớp, mỗi lớp có 1 chức
năng nhất định và có sự hỗ trợ liên hoàn lẫn nhau:
27
Phần mềm độc lập thiết bị
Chức năng:
Tạo ra giao tiếp chung cho tất cả các thiết bị.
Bảo vệ thiết bị
Cung cấp khối dữ liệu độc lập thiết bị
Cung cấp bộ đệm (buffer) để hỗ trợ cho quá trình
đồng bộ hoá hoạt động của hệ thống.
Định vị trí lưu trữ trên các khối thiết bị.
Cấp phát và giải phóng thiết bị.
Thông báo lỗi cho người dùng (nếu có).
28
Trình điều khiển thiết bị
Chức năng:
Nhận yêu cầu từ phía lớp phần mềm độc lập thiết bị.
Chuyển đổi yêu cầu trừu tượng này thành cụ thể.
Điều phối yêu cầu này cho bộ điều khiển thiết bị (device
controller).
Giám sát thực hiện yêu cầu.
Ví dụ:
HĐH muốn đọc tập tin io.sys trên đĩa ở thư mục C:\.
Trình điều khiển đĩa phải hiểu là cần đọc khối nào.
Trình điều khiển đĩa chuyển yêu cầu này cho bộ điều khiển đĩa.
Bộ điều khiển đĩa phải kiểm tra hoạt động của motor đĩa, xác
định đầu đọc đã đúng vị trí chưa.
29
Trình điều khiển thiết bị
30
Bộ kiểm soát ngắt (interrupt handler)
Tương tác giữa HĐH và các thiết bị phần cứng đều được thực hiện
thông qua cơ chế ngắt (interrupt).
Bộ kiểm soát ngắt sẽ tiếp nhận các ngắt từ HĐH và ứng dụng của
người dùng cuối.
Dựa trên bảng “Interrupt vector” để phân phối các ngắt đến các bộ
điều khiển thiết bị tương ứng.
Quản lý và giám sát quá trình thực hiện ngắt.
Nhận ngắt thông báo quá trình xuất nhập hoàn tất hoặc có lỗi xảy
ra trong quá trình xuất nhập từ bộ điều khiển thiết bị để chuyển lên
cho HĐH.
31
Bộ kiểm soát ngắt (interrupt handler)
32
Cơ chế truy cập bộ nhớ trực tiếp
DMA (Direct Memory Access)
Xét quá trình đọc đĩa không có DMA:
HĐH chuyển yêu cầu đọc đĩa cho bộ điều khiển đĩa.
Bộ điều khiển đọc tuần tự các khối trên đĩa.
Đọc từng bit cho đến khi các khối được đưa vào bộ đệm của
bộ điều khiển đĩa.
Bộ điều khiển đĩa tạo ngắt để báo qua CPU biết quá trình đọc
đĩa hoàn tất.
CPU lần lượt lấy từng byte dữ liệu từ bộ đệm của bộ điều
khiển đĩa để chuyển về bộ nhớ chính để thao tác.
Nhận xét:
Lãng phí thời gian xử lý của CPU để chuyển dữ liệu từ bộ đệm
của bộ điều khiển đĩa về bộ nhớ chính
33
Cơ chế DMA
Cơ chế DMA giúp CPU không bị lãng phí bằng cách:
HĐH gởi cho bộ điều khiển đĩa các thông số gồm: các khối cần
đọc + vị trí lưu trữ các khối này bên trong bộ nhớ chính (địa chỉ
DMA) + số byte cần đọc.
Bộ điều khiển đĩa đọc các khối cần thiết lưu vào trong bộ đệm
của nó.
Sau khi đọc xong, bộ điều khiển chuyển lần lượt từng byte từ
bộ đệm của nó về địa chỉ DMA – nơi cần lưu trữ dữ liệu cần
thiết bên trong bộ nhớ chính.
Bộ điều khiển đĩa tạo 1 ngắt để thông báo cho CPU biết quá
trình chuyển dữ liệu đã hoàn tất.
34
Cơ chế DMA
35
Quản lý lỗi & bảo vệ xuất nhập thiết bị
Quá trình xử lý của người dùng cuối hay HĐH có thể vô
tình hay cố ý thực hiện các lệnh/thao tác xuất nhập bất
hợp pháp gây hại cho hệ thống và thiết bị.
Cần định nghĩa trước và gán đặc quyền cho các lệnh xuất
nhập của hệ thống dưới dạng các lời gọi hệ thống
(system call).
Giám sát quá trình xuất nhập của người dùng cuối.
Tất cả quá trình xuất nhập của ƯD phải được thực hiện
thông qua các lời gọi hệ thống.
36
Quản lý lỗi & bảo vệ xuất nhập thiết bị
Khi gặp lỗi trong quá trình xuất nhập, các bộ điều khiển
thiết bị sẽ trả về cho HĐH mã lỗi tương ứng
HĐH diễn dịch mã lỗi trả về để có phương án giải quyết
thích hợp.
HĐH cũng diễn dịch và lưu vào nhật ký hệ thống (system
log) các lỗi tương ứng để giúp người quản trị hệ thống
giám sát lỗi và phục hồi.
1Chương 3: Hệ thống quản lý tập tin
Nội dung chương:
Các khái niệm cơ bản về hệ thống tập tin
Cài đặt hệ thống quản lý tập tin
Mô hình tổ chức và quản lý tập tin của các HĐH
thông dụng.
Truy xuất hệ thống quản lý tập tin.
2Hệ thống lưu trữ trong máy tính
Bộ nhớ trong
RAM, ROM, Register, Cache
Bộ nhớ ngoài
HD (Hard Disk)
FD (Floppy Disk)
CD (Compact Disk)
DVD (Digital Video Disk)
USB disk
cache
Bộ nhớ chính
Bộ nhớ phụ
(đĩa)
Bộ nhớ thứ cấp
(băng từ)
T
ố
c
đ
ộ
D
u
n
g
l
ư
ợ
n
g
G
i
á
t
h
à
n
h
3Các khái niệm cơ bản
RAM không có khả năng lưu trữ dữ liệu lâu dài.
Máy tính phải sử dụng các thiết bị có khả năng
lưu trữ lâu dài vì:
Chứa lượng thông tin lớn.
Thông tin được lưu trữ trước khi xử lý.
Nhiều ứng dụng muốn truy cập cùng lúc.
Æ Phải sử dụng các thiết bị lưu trữ ngoài gọi là bộ
nhớ ngoài với các đơn vị lưu trữ được tổ chức
thành:
Tập tin
Thư mục
4Tổ chức dữ liệu trên đĩa từ
Cấu trúc vật lý của đĩa từ:
Hình tròn, gồm nhiều mặt gọi là head.
Mỗi mặt có nhiều đường tròn đồng tâm gọi
là track hay cylinder.
Trên các đường tròn (track) được chia
thành các cung tròn gọi là sector.
Mỗi cung tròn chứa 4096 điểm từ (~ 4096
bit = 512 bytes).
Mỗi mặt có 1 đầu đọc để đọc ghi dữ liệu
Mỗi lần đọc/ghi ít nhất 1 cung tròn (512B).
5Cấu trúc đĩa từ
Head 0 Head 2
6Cấu trúc đĩa từ
read-write
head
track
sectors
cylinder
7Cấu trúc đĩa từ
8Tổ chức dữ liệu trên đĩa từ (tt)
Mỗi lần đọc hay ghi đĩa có thể thực hiện N sector
liên tiếp (N>=1).
Vị trí của mỗi sector trong đĩa được thể hiện bằng
3 tham số : {sector, track, head}.
Head được đánh số từ trên xuống bắt đầu từ 0.
Track được đánh số từ ngoài vào bắt đầu từ 0.
Sector được đánh số bắt đầu từ 1 theo chiều
ngược với chiều quay của đĩa.
9Tổ chức đĩa logic
Thay vì phải dùng đến 3 tham số dựa trên cấu trúc đĩa
vật lý nên khái niệm đĩa logic được đưa ra để dễ thao tác
và tính toán hơn.
Đĩa logic là một dãy sector được đánh số bắt đầu từ 0.
Mỗi sector trên đĩa logic tương ứng với 1 sector duy nhất
trên đĩa vật lý sao cho khi truy xuất sector K thì khi truy
xuất tiếp sang sector K+1 là nhanh nhất.
N-143210
10
Dung lượng đĩa
Kích thước đĩa phụ thuộc vào các yếu tố sau:
Số mặt từ (platter)
Số track trên mỗi mặt từ
Số sector trên mỗi track
Kích thước (byte) trên mỗi track.
11
Ví dụ cách tổ chức đĩa mềm
Các thông số trên đĩa mềm 1.44MB:
Đĩa có 2 head, 80 track/head, 18 sector/track.
Dung lượng đĩa = 2 head/disk *80 track/head *18
sector/track = 2880 sector/disk = 0.5 KB/sector * 2880
sector/disk = 1440 KB/disk (~ 1.4MB)
Các sector logic có chỉ số từ 0 đến 2879 và tương ứng
với các sector vật lý như sau:
Sector 0..17 tương ứng với sector vật lý (1,0,0)..(18,0,0)
Sector 18..35 tương ứng với sector vật lý (1,0,1)..(18,0,1)
Sector 2879 tương ứng với sector vật lý (18,79,1).
12
Mặt đĩa
Tay quay
Đầu đọc
Thời gian truy cập đĩa
Disk access time =
Seek Time
+ Latency Time
+ Transfer Time
13
Các thuật toán đọc đĩa
First-Come-First-Serve (FCFS)
SCAN, C-SCAN
Shortest Seek Time First (SSTF)
Look
14
First Come First Serve (FCFS)
Phục vụ theo thứ tự yêu cầu
Đơn giản nhưng không đáp ứng tốt dịch vụ
t i m
e
cylinder number
1 5 10 15 20 25
12
Các khối cần đọc (đầu đọc hiện tại tại vị trí 11):
14 2 7 21 8 24
scheduling
queue
24
8
21
7
2
14
12
15
SCAN
Di chuyển đầu đọc về 1 phía của đĩa đến block xa nhất sau
đó di chuyển về phía kia.
Còn gọi là thuật toán thang máy.
t i m
e
cylinder number
1 5 10 15 20 25
12 14 2 7 21 8 24
scheduling
queue
Các khối cần đọc (đầu đọc hiện tại tại vị trí 11):
16
SCAN vs. FCFS
Trong
trường hợp
này, SCAN
tốt hơn
FCFS vì
hạn chế sự
di chuyển
của đầu đọc
đĩa
cylinder number
1 5 10 15 20 25
t i m
e
t i m
e
17
C-SCAN
Nguyên tắc:
Tương tự thuật toán SCAN.
Chỉ khác khi di chuyển đến 1 đầu của đĩa thì trở về vị
trí bắt đầu của đĩa.
18
C-SCAN
19
LOOK
Nhận xét:
Hai thuật toán lập lịch SCAN và C-SCAN luôn luôn
di chuyển đầu đọc của đĩa từ đầu này sang đầu kia
nhưng thông thường thì đầu đọc chỉ di chuyển đến
khối xa nhất ở mỗi hướng chứ không đến cuối.
Nguyên tắc:
Giống SCAN và C-SCAN nhưng chỉ di chuyển đầu
đọc đến khống xa nhất chứ không đến cuối.
20
LOOK
21
SSTF
SSTF = Shortest Seek Time First
Nguyên tắc:
Di chuyển đầu đọc đến các khối cần thiết theo vị trí
lần lượt gần với vị trí hiện hành của đầu đọc nhất
22
SSTF
23
Lập trình tương tác với đĩa
Các truy xuất đĩa trực tiếp trong C:
Đọc nội dung sector trên đĩa logic: hàm absread.
Ghi nội dung vào sector logic: abswrite.
Thực hiện thao tác trên đĩa vật lý: biosdisk.
Cú pháp:
int absread(int drive, int nsects, long lsect, void
*buffer).
int abswrite (int drive, int nsects, long lsect, void
*buffer);
int biosdisk (int cmd, int drive, int head, int track, int
sector, int nsects, void *buffer);
24
Tập tin (1/4)
Tập tin (file) là đơn vị lưu trữ thông tin trên bộ
nhớ ngoài.
Thông tin chứa trong tập tin là bền vững (không
bị mất đi khi bị mất điện).
Tên tập tin:
Là cơ chế trừu tượng để quản lý tập tin.
Có thể phân biệt chữ hoa và thường (tuỳ HĐH cụ thể)
Hỗ trợ tên tập tin theo định dạng 8.3 (gồm tên và phần
mở rộng) hay tên dài (Long File Name).
Ví dụ: baitap.cpp hay “bai tap lap trinh.cpp”
25
Tập tin (2/4)
Các thuộc tính của tập tin:
Người sở hữu/nhóm sở hữu
Chỉ đọc (Read-only)
Ẩn (Hidden)
Hệ thống (System)
Lưu trữ (Archive)
Ngày giờ tạo.
Ngày giờ truy cập cuối cùng
Ngày giờ thay đổi cuối cùng
Kích thước
26
Tập tin (3/4)
Tạo
Xoá
Mở
Đóng
Đọc
Ghi
Các thao tác trên tập tin:
Thêm
Tìm
Lấy thuộc tính
Thiết lập thuộc tính
Đổi tên
27
Tập tin (4/4)
Các loại tập tin:
Tập tin văn bản (text file): chứa các dòng văn bản,
cuối dùng có ký hiệu kết thúc dòng (end line)
Tập tin nhị phân (binary file): là tập tin có cấu trúc.
Các truy xuất trên tập tin:
Tuần tự: Phải đọc từ đầu tập tin đến vị trí mong muốn.
Ngẫu nhiên: Có thể di chuyển nhanh (SEEK) đến
đúng vị trí cần đọc.
28
Khối điều khiển tập tin
29
Thư mục
Giúp cho việc quản lý các tập tin dễ dàng hơn.
Giúp định vị các tập tin 1 cách nhanh chóng.
Gom nhóm các tập tin vào trong các thư mục theo
ý nghĩa và mục đích sử dụng của người dùng.
root
bob sue
www fun3013
30
Thư mục
Ví dụ 1 cấu trúc cây thư mục phân cấp
31
Thư mục - Đường dẫn (Path)
Dùng để xác định vị trí lưu tập tin khi hệ thống
được tổ chức thành cây thư mục:
Đường dẫn tuyệt đối:
Ví dụ: “C:\Downloads\software\baigiang.doc”
Đường dẫn tương đối:
Ví dụ: “software\baigiang.doc” nếu thư mục hiện hành là
“C:\Downloads\”
Các thư mục đặc biệt:
Thư mục hiện hành (.)
Thư mục cha (..)
32
Thư mục
Các thao tác trên thư mục:
Tạo Xoá Đổi tên
Mở Đóng
Tìm kiếm Liệt kê
Liên kết: Cho phép 1 tập tin có thể xuất hiện trong
nhiều thư mục khác nhau.
Bỏ liên kết: Nếu tập tin chỉ có 1 liên kết với 1 thư
mục, nó sẽ bị loại bỏ hoàn toàn, ngược lại nó sẽ bị
giảm chỉ số liên kết
33
Cấp phát vùng nhớ chứa tập tin
Các khối (block) đĩa sẽ được cấp phát để lưu trữ
nội dung tập tin theo các cơ chế cấp phát:
Cấp phát liên tục
Cấp phát bằng danh sách liên kết
Cấp phát bằng danh sách liên kết sử dụng chỉ mục
(index).
Cấp phát bằng I-node
34
Cấp phát liên tục
Cấp phát 1 số block liên tục trên đĩa để lưu trữ nội
dung tập tin
Nhận xét:
Đơn giản: chỉ cần quản lý số hiệu khối bắt đầu và tổng
số block chiếm bởi tập tin.
Truy cập nội dung tập tin nhanh chóng vì các block
nằm kề nhau.
Gây lãng phí bộ nhớ.
Khó khăn khi tập tin mở rộng kích thước.
35
Cấp phát liên tục (tt)
36
Cấp phát bằng danh sách liên kết
Nội dung tập tin được lưu trữ ở những block
không cần liên tục. Các block này được xâu chuỗi
tạo thành 1 danh sách liên kết để quản lý.
Nhận xét:
Đơn giản: Chỉ cần quản lý block bắt đầu.
Tận dụng hiệu quả không gian đĩa.
Truy cập tập tin lâu hơn vì đầu đọc phải di chuyển
nhiều giữa các khối không liên tiếp.
Khối dữ liệu bị thu hẹp lại vì mỗi khối phải dùng 1
phần để lưu phần liên kết đến khối kế tiếp.
37
Cấp phát bằng danh sách liên kết (tt)
38
Cấp phát bằng danh sách liên kết sử
dụng chỉ mục (index)
Tương tự như phương pháp cấp phát bằng danh
sách liên kết nhưng thay vì sử dụng 1 phần nhỏ
của mỗi block để lưu chuỗi liên kết thì sử dụng 1
block riêng để lưu toàn bộ chuỗi liên kết.
Æ Các block chỉ chứa dữ liệu.
39
Cấp phát bằng danh sách liên kết sử dụng chỉ
mục (index) (tt)
40
Cấp phát bằng I-node
Mỗi I-node gồm 2 phần:
Các thuộc tính của tập tin
Địa chỉ của các khối dữ liệu: gồm 13 phần tử
10 phần tử đầu tiên: Địa chỉ của các khối dữ liệu trực tiếp.
Phần tử thứ 11: Địa chỉ của các khối dữ liệu gián tiếp đơn
(single indirect): gồm 1 khối trỏ đến 210 phần tử chứa địa
chỉ của các khối dữ liệu.
Phần tử thứ 12: Địa chỉ của các khối dữ liệu gián tiếp đôi
(double indirect): chứa địa chỉ của các khối single indirect.
Phần tử thứ 13: Địa chỉ của các khối dữ liệu gián tiếp ba
(triple indirect)
41
Cấp phát bằng I-node (tt)
42
Cài đặt hệ thống tập tin của các HĐH cụ thể
MS-DOS
Windows
Unix
43
Tổ chức quản lý hệ thống tập tin trên đĩa từ
0 1 2 3 ..
Đĩa từ bao gồm danh sách các sector có kích thước 512Bytes
Kích thước đĩa (bytes) = (tổng số sector) x (512 bytes/sector)
44
Phân vùng đĩa (Disk Partition)
Toàn bộ vùng lưu trữ của đĩa được phân thành các
vùng logic không chồng lên nhau gọi là phân
vùng đĩa.
Partition #1 Partition #2 Partition #3
unused
45
Master Boot Record
Một phần nhỏ đầu tiên của đĩa được dành riêng cho các
thông tin quản lý đĩa.
Sector logic thứ 0 của đĩa (CHS = 001) là Master Boot
Record chứa thông tin mô tả cấu trúc vật lý của đĩa và
thông tin về các phân vùng logic của đĩa.
MBR
0 1 2
partition #1
46
MBR
Thông tin chứa trong MBR bao gồm:
Đoạn chương trình để giúp khởi động hệ thống
Bảng mô tả thông tin các phân vùng logic
Thông tin nhận diện MBR
signature (2 bytes)
Partition Table (64 bytes)
Bootstrap Loader
(446 bytes)512
bytes
47
Bảng mô tả các phân vùng
MBR có thể mô tả cho tối đa 4 phân vùng logic
được chia trên đĩa trong đó thường có 1 phân
vùng ở trạng thái “Active”
Starting sector
ID-number
Partition length
(in sectors)
S
T
A
T
U
S
T
Y
P
E16
bytes
Some fields contain ‘obsolete’ information
48
Primary Partition vs Extended Partition
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
MBR
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Partition
Table
Primary Partition Extended Partition
49
Phân vùng “active” là phân vùng chứa HĐH sẽ
được nạp mặc định khi máy tính khởi động.
Bảng mô tả các phân vùng (tt)
50
Trường TYPE-ID trong bảng mô tả phân vùng
Ý nghĩa của trường Type-ID trong mỗi phân vùng
TYPE-ID = 0x07 : Phân vùng chứa “Windows”
TYPE-ID = 0x83 : Phân vùng chứa “Linux”
TYPE-ID = 0x00 : Phân vùng không sử dụng.
51
Quá trình khởi động hệ thống và nạp HĐH
dựa trên thông tin các phân vùng
B1: POST (Power-On Self-Test)
B2: Tải MBR để đọc thông tin bảng phân vùng.
B3: Tìm phân vùng “active”.
B4: Chuyển quyền điều khiển về cho đoạn mã
chương trình nằm trong Boot Record của phân
vùng “active”
B5: Tải HĐH tại phân vùng “active”.
52
Tổ chức tập tin trên Windows: FAT
(12,16,32)
53
Tổ chức tập tin trên Windows: FAT
(12,16,32) (tt)
FAT: File Allocation Table
Các phiên bản của FAT: FAT12, FAT16, FAT32
12,16,32: Số bít dùng để đánh STT các khối (212,216,232)
FAT12: 212 (khối) x 512 bytes/khối = 2MB
FAT16: 216 (khối) x 512 bytes/khối = 32MB
FAT32: 232 (khối) x 512 bytes/khối = 4GB
Boot
sector FAT1
FAT2
(backup)
Root
directory Other directories and files
0000
0003
0004
FFFF
0006
0008
FFFF
FFFF
0000
empty File1 File1empty File2File1
File3File2 emptyFile2 empty empty
emptyempty empty empty empty empty
0000
0001
0002
0003
0004
0005
0006
0007
0008
0009
0000 0001 0002 0003 0004 0005
0006 0007 0008 0009 0010 0011
0012 0013 0014 0015 0016 0017
54
Tổ chức tập tin trên Windows: NTFS
Nhóm các sector liên tiếp nhau lại để tạo thành
các Cluster.
55
Tổ chức tập tin trên Windows: NTFS
NTFS không sử dụng khái niệm FAT và Root Dir
để quản lý các tập tin lưu trên đĩa mà sử dụng
khái nhiệm MFT (Master File Table).
MFT là 1 Metadata file bao gồm 1 danh sách các
trường chứa thông tin về mỗi tập tin lưu trữ trên
đĩa.
Thông tin trong MFT có thể giúp thiết lập các
thuộc tính bảo vệ, phục hồi, tìm kiếm, thiết lập
quota cho từng tập tin, thư mục trên đĩa.
56
Tổ chức tập tin trên Unix/Linux: I-node
mode
owner
Direct block 0
Direct block 1
Direct block 10
Direct block 11
Single indirect
Double indirect
Triple indirect
Data block
Data block
Data block
Data block
index
Data block
Data block
Data block
Data block
index
index
indexindex
indexindex
Data block
Data block
Data block
Data block
index
index Data block
I-node
Data block
10/20/2007 Trần Hạnh Nhi 1
Chöông 4: Quaûn lyù tieán trình
Moâ hình Tieán trình
Traïng thaùi tieán trình
Thoâng tin quaûn lyù tieán trình
Quaù trình ñieàu phoái tieán trình
Caùc thuaät toaùn ñieàu phoái
10/20/2007 Trần Hạnh Nhi 2
Khaùi nieäm : Ña nhieäm vaø ña chöông ???
Vì sao muoán xöû lyù ñoàng thôøi nhieàu coâng vieäc treân maùy tính ?
IO CPU IOCPU
Job 1
CPU
Job 1
CPU
IO
IO
CPU
IO
CPU
Job 2
CPU
CPU
Æ Xöû lyù ñoàng thôøi ñeå taêng hieäu suaát söû duïng CPU
10/20/2007 Trần Hạnh Nhi 3
Vì sao muoán xöû lyù ñoàng thôøi nhieàu coâng vieäc treân maùy tính ?
Æ Xöû lyù ñoàng thôøi ñeå taêng toác ñoä xöû lyù
Khaùi nieäm : Ña nhieäm vaø ña chöông ???
Job : kq = a*b + c*d;
CPU #1 CPU #1 CPU #2
x = a * b y = c * d
kq = x+y
x = a * b 1
y = c *d 2
kq = x+y 3
Xöù lyù tuaàn töï Xöûù lyù ñoàng haønh
10/20/2007 Trần Hạnh Nhi 4
Ña nhieäm vaø ña chöông
Multitasking (ña nhieäm) : cho pheùp nhieàu taùc vuï/ coâng vieäc
ñöôïc xöû lyù ñoàng thôøi
Ngöôøi duøng luoân mong muoán 1 HÑH ña nhieäm
Nhöng: Maùy tính thöôøng chæ coù 1 CPU?
Multiprogramming (ña chöông) : kyõ thuaät cho pheùp nhieàu
chöông trình ñöôïc thöïc hieän ñoàng thôøi (treân 1 CPU)
Giaû laäp nhieàu CPU aûo töø 1 CPU thaät ñeå cho pheùp thi haønh nhieàu
chöông trình ñoàng thôøi.
AÛo hoaù baèng caùch naøo ? Xaây döïng caùc thuaät toaùn ñeå luaân chuyeån
CPU giöõa caùc chöông trình öùng duïng.
10/20/2007 Trần Hạnh Nhi 5
Xöû lyù ñoàng haønh, nhöõng khoù khaên ?
HÑH : “ Giaûi quyeát nhieàu coâng vieäc ñoàng thôøi,
ñaâu coù deã ! “
- Taøi nguyeân giôùi
haïn, öùng duïng
“voâ haïn”
- Nhieàu hoaït ñoäng
ñan xen
??? Phaân chia taøi
nguyeân ?
??? Chia seû taøi
nguyeân ?
??? Baûo veä?
Excel
Visual C++
CDplayer
Winword
10/20/2007 Trần Hạnh Nhi 6
Giaûi phaùp
HÑH : “ Ai cuõng coù phaàn khi ñeán löôït maø ! ”
-“Chia ñeå trò”, coâ
laäp caùc hoaït
ñoäng.
- Moãi thôøi ñieåm
chæ giaûi quyeát 1
yeâu caàu.
- Aûo hoaù taøi
nguyeân : bieán ít
thaønh nhieàu
Winword
CDPlayer
Visual C ++
Excel
10/20/2007 Trần Hạnh Nhi 7
Giaûi phaùp
CPU
10/20/2007 Trần Hạnh Nhi 8
Khaùi nieäm tieán trình (Process)
Tieán trình laø moät chöông trình ñang trong quaù trình thöïc hieän
Moãi tieán trình sôû höõu
Moät CPU (aûo) rieâng
Moät khoâng gian nhôù rieâng
Chieám giöõ 1 soá taøi nguyeân cuûa heä thoáng
Vd: Moät chöông trình Word coù theå ñöôïc chaïy 2 laàn seõ taïo ra
2 tieán trình khaùc nhau:
Microsoft Word – [Bai tap1.doc]
Microsoft Word – [Bai tap2.doc]
10/20/2007 Trần Hạnh Nhi 9
Hai phaàn cuûa tieán trình
int a;
int a;
P1
P2
Doøng xöû lyù
Khoâng gian ñòa chæ
10/20/2007 Trần Hạnh Nhi 10
Traïng thaùi tieán trình ?
Taïi 1 thôøi ñieåm, tieán trình ôû moät trong caùc traïng thaùi sau:
ready
☺ Rs
/ CPU
running
☺ Rs
☺ CPU
blocked
/ Rs
/ CPU
Nhaän CPU
Traû CPU
Chôø R
Nhaän R
10/20/2007 Trần Hạnh Nhi 11
Khoái quaûn lyù tieán trình - PCB (Process Control Block)
Định danh (Process ID)
Trạng thaùi tiến trình
Ngữ cảnh tiến trình
Trạng thaùi CPU
Bộ xử lyù (cho maùy nhiều CPU)
Bộ nhớ chính
Taøi nguyeân sử dụng/tạo lập
Thoâng tin giao tiếp
Tiến trình cha, tiến trình con
Độ ưu tieâên
Thoâng tin thống keâ
pid
State
(State, details)
Context
(IP, Mem, Files)
Scheduling statistic
Relatives
( Dad, children)
Process control Block
PCB
10/20/2007 Trần Hạnh Nhi 12
Ví duï: Khoái quaûn lyù tieán trình cuûa HÑH MachOS
typedef struct machpcb {
char mpcb_frame[REGOFF];
struct regs mpcb_regs; // user's saved registers
struct rwindow mpcb_wbuf[MAXWIN]; //user window save buffer
char *mpcb_spbuf[MAXWIN]; //sp's for each wbuf
int mpcb_wbcnt; //number of saved windows in pcb_wbuf
struct v9_fpu *mpcb_fpu; // fpu state
struct fq mpcb_fpu_q[MAXFPQ]; // fpu exception queue
int mpcb_flags; // various state flags
int mpcb_wocnt; // window overflow count
int mpcb_wucnt; // window underflow count
kthread_t *mpcb_thread; // associated thread
} machpcb_t;
10/20/2007 Trần Hạnh Nhi 13
Caùc thao taùc treân tieán trình
Taïo laäp tieán trình
Keát thuùc tieán trình
Thay ñoåi traïng thaùi tieán trình :
Assign()
Block()
Awake()
Suspend()
Resume()
10/20/2007 Trần Hạnh Nhi 14
Taïo laäp tieán trình
Caùc tình huoáng :
Khôûi ñoäng batch job
User logs on
Kích hoaït 1 service (print...)
Process goïi haøm taïo moät tieán trình khaùc
Caùc tieán trình coù theå taïo tieán trình con, hình thaønh caây tieán
trình trong heä thoáng
Caùc tieán trình môùi ñöôïc taïo coù theå thöøa höôûng taøi nguyeân töø
cha, hay ñöôïc caáp taøi nguyeân môùi
10/20/2007 Trần Hạnh Nhi 15
Keát thuùc tieán trình
Tình huoáng :
Tieán trình xöû lyù xong leänh cuoái cuøng hay goïi exit ()
Keát thuùc Batch job , Halt instruction
User logs off
Do loãi chöông trình
Moät tieán trình coù theå keát thuùc 1 tieán trình khaùc neáu coù ID
(ñònh danh) cuûa tieán trình kia.
Ví duï: kill –-s SIGKILL 1234: huyû tieán trình coù ID laø 1234
10/20/2007 Trần Hạnh Nhi 16
Moâ hình ña tieán trình (MultiProcesses)
Heä thoáng laø moät taäp caùc tieán trình hoaït ñoäng ñoàng thôøi
Caùc tieán trình ñoäc laäp vôùi nhau => khoâng coù söï trao ñoåi
thoâng tin hieån nhieân..
winword
Visual C CDplayer
Excel
OS
10/20/2007 Trần Hạnh Nhi 17
Ví duï moâ hình ña tieán trình
Giôø thi lyù thuyeát moân Heä Ñieàu haønh
Moãi sinh vieân laø moät tieán trình :
Cuøng laøm baøi => Hoaït ñoäng ñoàng haønh
Coù baøi thi , buùt, giaáyrieâng => Taøi nguyeân rieâng bieät
Ñoäc laäp => Khoâng trao ñoåi (veà nguyeân taéc)
Thöïc haønh moân Heä Ñieàu haønh
2 sinh vieân/nhoùm
Hôïp taùc ñoàng haønh
Nhu caàu trao ñoåi
Duøng taøi nguyeân chung
10/20/2007 Trần Hạnh Nhi 18
Moâ hình ña tieåu trình (MultiThreads)
Nhieàu tình huoáng caàn coù nhieàu doøng xöû lyù ñoàng thôøi cuøng
hoaït ñoäng trong moät khoâng gian ñòa chæ => cuøng chia seû taøi
nguyeân (server, OS, caùc chöông trình tính toaùn song song :
nhaân ma traän)
Khaùi nieäm môùi : tieåu trình (thread)
alta vista
10/20/2007 Trần Hạnh Nhi 19
Ví duï Moâ hình ña tieåu trình
Thöïc haønh moân Heä Ñieàu haønh
Moãi nhoùm 2 sinh vieân laø moät tieán trình :
Moãi sinh vieân laø moät tieåu trình
Cuøng laøm baøi => Hoaït ñoäng ñoàng haønh
Coùù baøi thöïc haønh chung => Taøi nguyeân chung
Trao ñoåi vôùi nhau
10/20/2007 Trần Hạnh Nhi 20
Khaùc bieät giöõa Tieåu trình & Tieán trình
Tieåu trình : 1 doøng xöû lyù
Tieán trình :
1 khoâng gian ñòa chæ
1 hoaëc nhieàu tieåu trình
Caùc tieán trình laø ñoäc laäp
Caùc tieåu trình trong cuøng 1
tieán trình khoâng coù söï baûo veä
laãn nhau (caàn thieát ? ).
P1
int a;
T1 T2 T
3
10/20/2007 Trần Hạnh Nhi 21
Tieåu trình haït nhaân (Kernel thread)
Khaùi nieäm tieåu trình ñöôïc xaây döïng beân trong haït nhaân
Ñôn vò xöû lyù laø tieåu trình
Ví duï :
Windows 95/98/NT/2000
Solaris, Tru64 UNIX, BeOS, Linux
T1 T2
Kernel Thread
System call
User mode
Kernel mode
10/20/2007 Trần Hạnh Nhi 22
Phaân chia CPU ?
1 CPU vaät lyù : laøm theá naøo ñeå taïo aûo giaùc moãi tieán trình sôû
höõu CPU rieâng cuûa mình ?
Æ Luaân chuyeån CPU giöõa caùc tieán trình
2 thaønh phaàn ñaûm nhieäm vai troø ñieàu phoái:
Scheduler choïn 1 tieán trình
Dispatcher chuyeån CPU cho tieán trình ñöôïc choïn CPU
10/20/2007 Trần Hạnh Nhi 23
Caùc danh saùch tieán trình
Ready List P1 P4 P5
Waiting Lists
R1 P7P2
P10P3
P6
R2
R3
10/20/2007 Trần Hạnh Nhi 24
Scheduler - Nhieäm vuï
Ra quyeát ñònh choïn moät tieán trình ñeå caáp phaùt CPU :
ÖÙng cöû vieân = {Caùc tieán trình ready list}
0 tieán trình : CPU raûnh roãi (idle)!
1 tieán trình : khoâng caàn suy nghó nhieàu, ñuùng khoâng ?
>1 : choïn ai baây giôø ? Döïa vaøo caùc thuaät toaùn ñieàu phoái
Ready List P1 P4 P5
10/20/2007 Trần Hạnh Nhi 25
Dispatcher - Nhieäm vuï
Nhieäm vuï cuûa Dispatcher: Chuyeån ñoåi ngöõ caûnh
Xeùt ví duï
Tieán trình A ñang duøng CPU 1 chuùt thì bò HÑH thu hoài CPU
HÑH caáp CPU cho B duøng 1 chuùt, HÑH thu hoài laïi CPU.
HÑH caáp CPU trôû laïi cho A.
ÆGiaù trò caùc thanh ghi giöõa nhöõng laàn chuyeån ñoåi CPU ?
Kòch baûn :
Löu ngöõ caûnh tieán trình hieän haønh
Naïp ngöõ caûnh tieán trình ñöôïc choïn keá tieáp
10/20/2007 Trần Hạnh Nhi 26
10/20/2007 Trần Hạnh Nhi 27
Dispatcher - Thaûo luaän
Baûn thaân HÑH cuõng laø 1 phaàn meàm, nghóa laø cuõng söû duïng CPU ñeå
coù theå chaïy ñöôïc.
Caâu hoûi: Khi tieán trình A ñang chieám CPU, laøm theá naøo HÑH coù
theå thu hoài CPU laïi ñöôïc ? (vì luùc naøy HÑH khoâng giöõ CPU)
EÙp buoäc NSD thænh thoaûng traû CPU laïi cho HÑH ? Coù khaû thi ?
Maùy tính phaûi coù 2 CPU, 1 daønh rieâng cho HÑH ?
Î HÑH söû duïng ngaét ñoàng hoà (ngaét ñieàu phoái) ñeå kieåm soaùt heä thoáng
Î Moãi khi coù ngaét ñoàng hoà, HÑH kieåm tra xem coù caàn thu hoài CPU töø 1 tieán trình naøo
ñoù laïi hay khoâng ?
Î HÑH chæ thu hoài CPU khi coù ngaét ñoàng hoà phaùt sinh.
Î Khoaûng thôøi gian giöõa 2 laàn ngaét ñieàu phoái goïi laø chu kyø ñoàng hoà (toái thieåu laø 18.2
laàn / giaây)
10/20/2007 Trần Hạnh Nhi 28
Löïa choïn tieán trình ?
Taùc vuï cuûa Scheduler
Muïc tieâu ?
Söû duïng CPU hieäu quaû
Ñaûm baûo taát caû caùc tieán trình ñeàu tieán trieån xöû lyù
Tieâu chuaån löïa choïn ?
Taát caû caùc tieán trình ñeàu nhö nhau ?
Ñeà xuaát moät ñoä öu tieân cho moãi tieán trình ?
Thôøi ñieåm löïa choïn ? (Thôøi ñieåm kích hoaït Scheduler())
10/20/2007 Trần Hạnh Nhi 29
Muïc tieâu ñieàu phoái
Hieäu quûa (Efficiency)
ª Thôøi gian
ª Ñaùùp öùng (Response time)
ª Hoaøn taát (Turnaround Time = Tquit -Tarrive):
ªChôø (Waiting Time = T in Ready ) :
© Thoâng löôïng (Throughput = # jobs/s )
© Hieäu suaát Taøi nguyeân
ªChi phí chuyeån ñoåi
Coâng baèng ( Fairness) : Taát caû caùc tieán trình ñeàu coù cô hoäi
nhaän CPU
10/20/2007 Trần Hạnh Nhi 30
Thôøi ñieåm ra quyeát ñònh ñieàu phoái
Ñieàu phoái ñoäc quyeàn (non-preemptive scheduling):
tieán trình ñöôïc choïn coù quyeàn ñoäc chieám CPU
Caùc thôøi ñieåm kích hoaït Scheduler
P cur keát thuùc
P cur : running ->blocked
Ñieàu phoái khoâng ñoäc quyeàn (preemptive
scheduling): tieán trình ñöôïc choïn coù theå bò cöôùp
CPU bôûi tieán trình coù ñoä öu tieân cao hôn
Caùc thôøi ñieåm kích hoaït Scheduler
P cur keát thuùc
P cur : Running -> Blocked
Q : Blocked / New -> Ready
10/20/2007 Trần Hạnh Nhi 31
Hai nguyeân taéc ñieàu phoái CPU
Khoâng ñoäc quyeàn
while (true) {
interrupt Pcur
save state Pcur
Scheduler.NextP() Æ Pnext
load state pnext
resume Pnext
}
Ñoäc quyeàn
while (true) {
save state Pcur
Scheduler.NextP() Æ Pnext
load state pnext
resume Pnext
wait for Pnext
}
10/20/2007 Trần Hạnh Nhi 32
Ñaùnh giaù chieán löôïc ñieàu phoái
Söû duïng 2 ñaïi löôïng ño :
Turn- around time = Tquit –Tarrive: töø luùc vaøo HT ñeán khi hoaøn taát
Waiting time = T in Ready
Xeùt tröôøng hôïp trung bình
N tieán trình
Avg Turn- around time = (Σ Turn- around time Pi )/N
Avg Waiting time = (Σ Waiting time Pi )/N
10/20/2007 Trần Hạnh Nhi 33
Caùc chieán löôïc ñieàu phoái
FIFO (FCFS)
Xoay vòng (Round Robin)
Theo độ ưu tiên
Công việc ngắn nhất (SJF)
Nhiều mức độ ưu tiên
10/20/2007 Trần Hạnh Nhi 34
FCFS (First comes first served)
Tieán trình vaøo RL laâu nhaát ñöôïc choïn
tröôùc
Theo thứ tự vaøo RL
Độc quyềnABC CPU
Ready List
CPUBC
Ready List
CPUC
Ready List
10/20/2007 Trần Hạnh Nhi 35
Minh hoïa FCFS
32P3
31P2
240P1
CPU burstTarriveRLP
0:00 P1 vào RL
P1 dùng CPU
0:01 P2 vào RL
0:02 P3 vào RL
0:24 P1 kết thúc
P2 dùng CPU
AvgWT = (23+25)/3 = 16
0:27 P2 kết thúc
P3 dùng CPU
27-230-2P3
24-127-1P2
024P1
WTTTP
P1 P2 P3
0 24 27
10/20/2007 Trần Hạnh Nhi 36
Nhaän xeùt FCFS
Ñôn giaûn
Chòu ñöïng hieän töôïng tích luõy thôøi gian chôø
Tieán trình coù thôøi gian xöû lyù ngaén ñôïi tieán trình coù thôøi gian xöû lyù
daøi
Öu tieân tieán trình cpu-bounded
Coù theå xaûy ra tình traïng ñoäc chieám CPU
10/20/2007 Trần Hạnh Nhi 37
Ñieàu phoái Round Robin (RR)
ABC CPU
Ready List
A chỉ chiếm CPU trong q ms
BCA CPU
Ready List
B được giao quyền sử dụng CPU
trong q ms kế tiếp
CAB CPU
Ready List
C được giao quyền sử dụng CPU
trong q ms kế tiếp
Ñieàu phoái theo nguyeân taéc FCFS
Moãi tieán trình chæ söû duïng moät löôïng q cho moãi laàn söû duïng CPU
Quantum/
Time slice
10/20/2007 Trần Hạnh Nhi 38
Minh hoïa RR, q=4
32P3
31P2
240P1
CPU burstTarriveRLP
AvgWT = (6+3+5)/3 = 4.66
7-210-2P3
4-17-1P2
0+(10-4)30P1
WTTTP
P1 P2 P3 P1 P1 P1 P1 P1
0 4 7 10 14 18 22 26 30
0:00 P1 vào, P1 dùng CPU
0:01 P2 vào (đợi)
0:02 P3 vào (đợi)
0:04 P1 hết lượt, P2 dùng CPU
0:07 P2 dừng, P3 dùng CPU
0:10 P3 dừng, P1 dùng CPU
0:14 P1 vẫn chiếm CPU
10/20/2007 Trần Hạnh Nhi 39
Minh hoïa RR, q=4
312P3
34P2
240P1
CPU burstTarriveRLP
P1 P1 P2 P1 P3 P1 P1 P1
0 4 8 11 15 18 22 26 30
RL
0:00 P1
0:04
0:8 P2 P1
?
Tranh chaáp vò trí trong RL : “Chung thuûy”
1. P : running -> ready
2. P : blocked -> ready
3. P: new ->ready
Khoâng phaûi luoân luoân coù thöù töï ñieàu phoái P1
P2 P3 P4P1 P2 P3 P4...
0:11 P1
0:15 P3 P1
0:18 P1
0:04 P1 P2
0:04 P2 P1
“Chung thuûy”
“Coù môùi nôùi cuõ”
10/20/2007 Trần Hạnh Nhi 40
RR : Khi naøo keát thuùc 1 löôït söû duïng CPU
Heát thôøi löôïng q ms (quantum) cho pheùp
Tieán trình keát thuùc
Tieán trình bò khoùa
ChờRs
Chờ biến cố
10/20/2007 Trần Hạnh Nhi 41
Nhaän xeùt RR
Söû duïng cô cheá khoâng ñoäc quyeàn
Moãi tieán trình khoâng phaûi ñôïi quaù laâu
Loaïi boû hieän töôïng ñoäc chieám CPU
Hieäu quaû ?
Phuï thuoäc vaøo vieäc choïn löïa quantum q
q quaùù lớn ???
q quaù nhỏ ???
Tröôøng hôïp xaáu nhaát cuûa RR ?
Bao laâu ?
Giaûm tíùnh töông
taùc
Taêng chi phí chuyeån ñoåi
ngöõ caûnh
10/20/2007 Trần Hạnh Nhi 42
Ñieàu phoái vôùi ñoä öu tieân
Phân biệt tiến trình quan trọng >< tiến trình bình thường?
WinAmp
độ ưu tiên: cao (-3)
Outlook
độ ưu tiên: thấp (3)
WinWord
độ ưu tiên: trung bình (0)
Đ
ộ
ưu
tiên
Tieán trình coù ñoä öu tieân cao nhaát ñöôïc choïn caáp CPU tröôùc
10/20/2007 Trần Hạnh Nhi 43
Ví duï: Ñoä öu tieân cuûa HÑH WinNT
WinNT gaùn cho moãi tieán trình ñoä öu tieân coù giaù trò giöõa 0 & 31
0 (ñoä öu tieân nhoû nhaát): daønh rieâng cho traïng thaùi system idle
Ñoä öu tieân ñöôïc phaân theo nhoùm:
Realtime : (16 - 31)
Thích hôïp cho caùc tieán trình thôøi gian thöïc
Daønh rieâng cho caùc tieán trình cuûa ngöôøi quaûn trò heä thoáng
Dynamic : (0 - 15)
Thích hôïp cho caùc tieán trình cuûa ngöôøi duøng thöôøng
Chia thaønh 3 möùc :
high (11 - 15)
normal (6 - 10)
idle (2 - 6)
10/20/2007 Trần Hạnh Nhi 44
Bieåu ñoà phaân boá ñoä öu tieân cuûa WinNT
24
realtime
13
high
8
normal
system idle
dynamic idle
dynamic time-critical
realtime idle
realtime time-critical
0
1
15
dynamic
levels 1-15
16
31
realtime
levels 16-31
lowest (-2)
below normal (-1)
normal (0)
above normal (+1)
highest (+2)
4
idle
10/20/2007 Trần Hạnh Nhi 45
Nguyeân taéc ñieàu phoái
Độc quyền
Lượt sử dụng CPU kết thuùc khi:
tiến trình kết thuùc,
tiến trình bị khoùa
Khoâng độc quyền
Lượt sử dụng CPU kết thuùc khi:
tiến trình kết thuùc,
tiến trình bị khoùa,
coùtiến trình vôùi độ ưu tieân cao hơn vaøo RL
10/20/2007 Trần Hạnh Nhi 46
Minh hoïa ñoä öu tieân (khoângñoäc quyeàn)
1
0
2
Priority
32P3
31P2
240P1
CPU burstTRLP
AvgWT = (6+0+2)/3 = 2.66
4-27-2P3
04-1P2
0+(7-1)30P1
WTTTP
0:00 P1 vào, P1 dùng CPU
0:01 P2 vào (độ ưu tiên cao hơn P1)
P2 dành quyền dùng CPU
0:4 P2 kết thúc, P3 dùng CPU
0:7 P3 dừng, P1 dùng CPU
0:30 P1 dừng
P1 P3 P1
0 30
P2
41 7
P2
2
0:02 P3 vào (độ ưu tiên thấp hơn P2)
P3 không dành được quyền dùng CPU
10/20/2007 Trần Hạnh Nhi 47
Nhaän xeùt
Caùch tính ñoä öu tieân ?
Heä thoáng gaùn : CPU times
Ngöôøi duøng gaùn töôøng minh
Tính chaát ñoä öu tieân :
Tónh
Ñoäng
Soá phaän tieán trình coù ñoä öu tieân thaáp ?
Chôø laâu, laâu, laâu ...
starvation
Aging : taêng ñoä öu tieân
cho nhöõng tieán trình chôø
laâu trong heä thoáng
10/20/2007 Trần Hạnh Nhi 48
Shortest Job First (SJF)
P3
(cần 7 chu kỳ)
P1
(cần 5 chu kỳ)
P2
(cần 3 chu kỳ)
Ngắn nhất
Ready List
CPU
pi = thời_gian_còn_lại(Processi)
Là một dạng độ ưu tiên đặc biệt với độ ưu tiên
Î Có thể cài đặt độc quyền hoặc không độc quyền
10/20/2007 Trần Hạnh Nhi 49
Minh hoïa SJF (ñoäc quyeàn)(1)
32P3
31P2
240P1
CPU burstTarriveRLP
AvgWT = (23+25)/3 = 16
27-230P3
24-127P2
024P1
WTTTP
0:00 P1 vào, P1 dùng CPU
0:01 P2 vào RL
0:02 P3 vào RL
0:24 P1 kết thúc, P2 dùng CPU
0:27 P2 dừng, P3 dùng CPU
0:30 P3 dừng
P1 P2 P3
0 24 27 30
10/20/2007 Trần Hạnh Nhi 50
Minh hoïa SJF (ñoäc quyeàn)(2)
21P3
31P2
240P1
CPU burstTarriveRLP
AvgWT = (24+22)/3 = 15.33
24-226P3
26-129P2
024P1
WTTTP
0:00 P1 vào, P1 dùng CPU
0:01 P2 vào
0:01 P3 vào
0:24 P1 kết thúc, P3 dùng CPU
0:26 P3 dừng, P2 dùng CPU
0:29 P2 dừng
P1 P3 P2
0 24 26 29
10/20/2007 Trần Hạnh Nhi 51
Minh hoïa SJF (khoângñoäc quyeàn) (1)
32P3
31P2
240P1
CPU burstTarriveRLP
AvgWT = (6+0+2)/3 = 2.66
4-27-2P3
04-1P2
0+(7-1)30P1
WTTTP
0:00 P1 vào, P1 dùng CPU
0:01 P2 vào (độ ưu tiên cao hơn P1)
P2 dành quyền dùng CPU
0:4 P2 kết thúc, P3 dùng CPU
0:7 P3 dừng, P1 dùng CPU
0:30 P1 dừng
P1 P3 P1
0 30
P2
41 7
10/20/2007 Trần Hạnh Nhi 52
Minh hoïa SJF (khoângñoäc quyeàn) (2)
43P3
51P2
240P1
CPU burstTarriveRLP
AvgWT = (9+0+3)/3 = 4
6-310P3
06P2
0+(10-1)33P1
WTTTP
0:00 P1 vào, P1 dùng CPU
0:01 P2 vào (độ ưu tiên cao hơn P1)
P2 dành quyền dùng CPU
0:6 P2 kết thúc, P3 dùng CPU
0:9 P3 dừng, P1 dùng CPU
0:33 P1 dừng
P1 P3 P1
0 33
P2
61 10
P2
3
0:03 P3 vào (độ ưu tiên < P2)
P2 dành quyền dùng CPU
10/20/2007 Trần Hạnh Nhi 53
Minh hoïa SJF (nhieàu chu kyø CPU)
0
4
2
IO2
T
1
10
2
IO1
T
Null
R1
R2
IO2
R
8
1
5
CPU1
burst
R2
R1
R1
IO1
R
010P3
12P2
20P1
CPU2
burst
TarriveRLP
P1 P3
0 21
P2
62 10
P1
3
CPU
P1 P2
13
1913 15
P2
3
R1
P1 P3
221917 21
R2
P2
14
P3
15
P1
17
P3
10/20/2007 Trần Hạnh Nhi 54
Nhaän xeùt SJF
Toái öu thôøi gian chôø
Chöùng minh ?
Khoâng khaû thi
Laøm sao bieát CPU burst ?
AvgWT = (3a+2b+c)
Min AvgWT ?
a<b<c
P1
a
P2
b
P3
c
past historyrelative weightmost recent
information
( ) nnn t ταατ −+=+ 1 1
length of the nth
CPU burst
predicted value for
the nth CPU burst0<= α <=1
10/20/2007 Trần Hạnh Nhi 55
Ñieàu phoái vôùi nhieàu möùc öu tieân
Toå chöùc N RL öùng vôùi
nhieàu möùc öu tieân
Moãi RLi aùp duïng moät
chieán löôïc ñieàu phoái
thích hôïp
Giöõa caùc RL aùp duïng
ñieàu phoái theo ñoä öu
tieân :
RLi roãng môùi ñieàu phoái
RLi +1
Độ ưu tiên
1
2
n
C
P
U
Kết hợp
nhiều chiến lược
10/20/2007 Trần Hạnh Nhi 56
Ñieàu phoái vôùi nhieàu möùc öu tieân – Thöïc teá
Toå chöùc N RL öùng vôùi
nhieàu möùc öu tieân
Moãi RLi aùp duïng RR
Giöõa caùc RL aùp duïng
ñieàu phoái theo ñoä öu
tieân :
RLi roãng môùi ñieàu phoái
RLi +1
Độ ưu tiên
1
2
n
C
P
U
Kết hợp
nhiều chiến lược
10/20/2007 Trần Hạnh Nhi 57
Khuyeát ñieåm
Starvation !!!
Giaûi phaùp Aging :
Chôø laâu quaù : chuyeån leân RL
vôùi ñoä öu tieân cao hôn
Chieám CPU laâu quaù : chuyeån
xuoáng RL vôùi ñoä öu tieân thaáp
hôn
/ /2 /
☺ ☺1 ☺ CPU
Chờ lâu quá
Khi naøo thöïc hieän aging ?
Aging tieán trình naøo ?
10/20/2007 Trần Hạnh Nhi 58
Null00R220311P4
R232R15610P3
R152R2812P2
Null01R1580P1
Thieát
bò
Thôøi
gian
Thieát
bò
Thôøi
gian
IO laàn 2
CPU2
IO laàn 1
CPU1
Thôøi ñieåm
vaøo Ready
list
Tieán
trình
Bài tập: Hãy điều phối
CPU: SJF không độc quyền. R1,R2: FIFO
11/10/2007 Trần Hạnh Nhi 1
Chöông 5
Ñoàng boä hoaù tieán trình
11/10/2007 Trần Hạnh Nhi 2
Noäi dung baøi giaûng
Xöû lyù ñoàng haønh vaø caùc vaán ñeà:
Vaán ñeà tranh ñoaït ñieàu khieån (Race Condition)
Vaán ñeà phoái hôïp xöû lyù
Baøi toaùn ñoàng boä hoùa
Yeâu caàu ñoäc quyeàn truy xuaát (Mutual Exclusion)
Yeâu caàu phoái hôïp xöû lyù (Synchronization)
Caùc giaûi phaùp ñoàng boä hoaù
Busy waiting
Sleep & Wakeup
Caùc baøi toaùn ñoàng boä hoaù kinh ñieån
Producer – Consumer
Readers – Writers
Dinning Philosophers
11/10/2007 Trần Hạnh Nhi 3
Nhieàu tieán trình “chung soáng hoaø bình” trong heä thoáng ?
ÑÖØNG HY VOÏNG
An toaøn khi caùc tieán trình hoaøn toaøn ñoäc laäp
Laøm sao coù ñöôïc ??
Thöïc teá
Caùc tieán trình chia seû taøi nguyeân chung ( file system, CPU...)
Concurrent access => bugs.
Ví duï : Deâ con qua caàu
Xöû lyù ñoàng haønh = ...nhöùc ñaàu
11/10/2007 Trần Hạnh Nhi 4
Caùc vaán ñeà
Tranh chaáp
Nhieàu tieán trình truy xuaát ñoàng thôøi moät taøi nguyeân mang baûn chaát khoâng chia
seû ñöôïc
Æ Xaûy ra vaán ñeà tranh ñoaït ñieàu khieån (Race Condition)
Keát quaû ?
Khoù bieát , thöôøng laø ...sai
Luoân luoân nguy hieåm ?
...Khoâng, nhöng ñuû ñeå caân nhaéc kyõ caøng
Phoái hôïp
Caùc tieán trình khoâng bieát töông quan xöû lyù cuûa nhau ñeå ñieàu chænh hoaït ñoäng
nhòp nhaøng
ÆCaàn phoái hôïp xöû lyù (Rendez-vous)
Keát quaû : khoù bieát, khoâng baûo ñaûm aên khôùp
11/10/2007 Trần Hạnh Nhi 5
Noäi dung baøi giaûng
Xöû lyù ñoàng haønh vaø caùc vaán ñeà:
Vaán ñeà tranh ñoaït ñieàu khieån (Race Condition)
Vaán ñeà phoái hôïp xöû lyù
Baøi toaùn ñoàng boä hoùa
Yeâu caàu ñoäc quyeàn truy xuaát (Mutual Exclusion)
Yeâu caàu phoái hôïp xöû lyù (Synchronization)
Caùc giaûi phaùp ñoàng boä hoaù
Busy waiting
Sleep & Wakeup
Caùc baøi toaùn ñoàng boä hoaù kinh ñieån
Producer – Consumer
Readers – Writers
Dinning Philosophers
11/10/2007 Trần Hạnh Nhi 6
Tranh ñoaït ñieàu khieån (Race condition) - Ví duï
hits = hits +1; hits = hits + 1;
P1 P2
hits = 0
Keát quaû cuoái cuøng laø bao nhieâu ?
Ñeám soá ngöôøi vaøo Altavista : duøng 2 threads caäp
nhaät bieán ñeám hits=> P1 vaø P2 chia seû bieán hits
11/10/2007 Trần Hạnh Nhi 7
Tranh ñoaït ñieàu khieån (Race condition) - Ví duï
(4)hits = 0 + 1
(1) read hits (0)
(3) hits = 0 + 1
(2)read hits (0)
P1 P2
hits = 1
hits = 0
time
11/10/2007 Trần Hạnh Nhi 8
Tranh ñoaït ñieàu khieån (Race condition) - Ví duï
(4) hits = 1 + 1
(1) read hits (0)
(2) hits = 0 + 1
(3) read hits (1)
P1 P2
hits = 2
hits = 0
time
11/10/2007 Trần Hạnh Nhi 9
Ai thaéng ?
Coù baûo ñaûm raèng seõ coù ngöôøi thaéng ?
Neáu moãi tieán trình xöû lyù treân 1 CPU thì sao ?
Tranh ñoaït ñieàu khieån (Race condition) - Ví duï (tt)
Thread b:
while(i > -10)
i = i - 1;
print “B won!”;
Thread a:
while(i < 10)
i = i +1;
print “A won!”;
i=0;
11/10/2007 Trần Hạnh Nhi 10
Tranh ñoaït ñieàu khieån (Race condition)-Nhaän xeùt
Keát quaû thöïc hieän tieán trình phuï thuoäc vaøo keát quaû ñieàu phoái
Cuøng input, khoâng chaéc cuøng output
Khoù debug loãi sai trong xöû lyù ñoàng haønh
Xöû lyù
Laøm lô
Deã , nhöng coù phaûi laø giaûi phaùp
Khoâng chia seû taøi nguyeân chung : duøng 2 bieán hits1,hits2; xaây
caàu 2 lane...
Neân duøng khi coù theå, nhöng khoâng bao giôø coù theå ñaûm baûo ñuû taøi
nguyeân, vaø cuõng khoâng laø giaûi phaùp ñuùng cho moïi tröôøng hôïp
Giaûi phaùp toång quaùt : coù hay khoâng ?
Lyù do xaûy ra Race condition ? Æ Bad interleavings : moät tieán trình
“xen vaøo” quaù trình truy xuaát taøi nguyeân cuûa moät tieán trình khaùc
Giaûi phaùp : baûo ñaûm tính atomicity cho pheùp tieán trình hoaøn taát troïn
veïn quaù trình truy xuaát taøi nguyeân chung tröôùc khi coù tieán trình khaùc
can thieäp
11/10/2007 Trần Hạnh Nhi 11
Atomicity : loaïi boû Race Condition
read hits(1)
hits = 1 + 1
P1 P2
hits = 2
hits = 0
time
read hits (0)
hits = 0 + 1
11/10/2007 Trần Hạnh Nhi 12
Mieàn gaêng (Critical Section)
& Khaû naêng ñoäc quyeàn (Mutual Exclusion)
hits = hits + 1
printf(“Welcome”);
hits = hits + 1
printf(“Welcome”);
P1 P2
CSCS
Mieàn gaêng (CS) laø ñoaïn chöông trình coù khaû naêng gaây ra
hieän töôïng race condition
(Hoã trôï Atomicity : Caàn baûo ñaûm tính “ñoäc quyeàn truy
xuaát” (Mutual Exclusion) cho mieàn gaêng (CS)
printf(“Bye”); printf(“Bye”);
11/10/2007 Trần Hạnh Nhi 13
Noäi dung baøi giaûng
Xöû lyù ñoàng haønh vaø caùc vaán ñeà:
Vaán ñeà tranh ñoaït ñieàu khieån (Race Condition)
Vaán ñeà phoái hôïp xöû lyù
Baøi toaùn ñoàng boä hoùa
Yeâu caàu ñoäc quyeàn truy xuaát (Mutual Exclusion)
Yeâu caàu phoái hôïp xöû lyù (Synchronization)
Caùc giaûi phaùp ñoàng boä hoaù
Busy waiting
Sleep & Wakeup
Caùc baøi toaùn ñoàng boä hoaù kinh ñieån
Producer – Consumer
Readers – Writers
Dinning Philosophers
11/10/2007 Trần Hạnh Nhi 14
Phoái hôïp hoaït ñoäng
(1) Send(“Anh”);
P1
(2) Send(“yeâu”);
P2
(3) Send(“em”);
P3
(4) Send(“Khoâng”);
P4
Chuyeän gì ñaõ xaûy ra ?
(1) Send(“Anh”);
P1
(2) Send(“yeâu”);
P2
(3) printf(“em”);
P3
(4) Send(“Khoâng”);
P4
(1)Send(“Anh”);
P1
(2) Send(“yeâu”);
P2
(3) Send(“em”);
P3
(4) Send(“Khoâng”);
P4
11/10/2007 Trần Hạnh Nhi 16
Phoái hôïp xöû lyù
Laøm theá naøo baûo ñaûm trình töï thöïc hieän Job1 - Job2 ?
P1 vaø P2 thöïc hieän “heïn hoø” (Rendez-vous) vôùi nhau
Hoã trôï Rendez-vous : Baûo ñaûm caùc tieán trình phoái hôïp vôùi
nhau theo 1 trình töï xöû lyù ñònh tröôùc.
P1 P2
Job1;
Job2;
11/10/2007 Trần Hạnh Nhi 17
Noäi dung baøi giaûng
Xöû lyù ñoàng haønh vaø caùc vaán ñeà:
Vaán ñeà tranh ñoaït ñieàu khieån (Race Condition)
Vaán ñeà phoái hôïp xöû lyù
Baøi toaùn ñoàng boä hoùa
Yeâu caàu ñoäc quyeàn truy xuaát (Mutual Exclusion)
Yeâu caàu phoái hôïp xöû lyù (Synchronization)
Caùc giaûi phaùp ñoàng boä hoaù
Busy waiting
Sleep & Wakeup
Caùc baøi toaùn ñoàng boä hoaù kinh ñieån
Producer – Consumer
Readers – Writers
Dinning Philosophers
11/10/2007 Trần Hạnh Nhi 18
Baøi toaùn ñoàng boä hoaù (Synchronization)
Nhieàu tieán trình chia seû taøi nguyeân chung ñoàng thôøi :
Tranh chaápÖRace Condition
Æ Nhu caàu “ñoäc quyeàn truy xuaát” (Mutual Exclusion)
Caùc tieán trình phoái hôïp hoaït ñoäng :
Töông quan dieãn tieán xöû lyù ?
Æ Nhu caàu “hoø heïn” (Rendez-vous)
Thöïc hieän ñoàng boä hoaù :
Laäp trình vieân ñeà xuaát chieán löôïc
Caùc tieán trình lieân quan trong baøi toaùn phaûi toân troïng caùc luaätñoàng boä
Giaûi phaùp söû duïng caùc cô cheá ñoàng boä :
Do laäp trình vieân /phaàn cöùng / HÑH / NNLT cung caáp
11/10/2007 Trần Hạnh Nhi 19
Moâ hình ñaûm baûo Mutual Exclusion
Kieåm tra vaø daønh quyeàn vaøo CS
CS;
Töø boû quyeàn söû duïng CS
Nhieäm vuï cuûa laäp trình vieân:
Theâm caùc ñoaïn code ñoàng boä hoùa vaøo chöông trình goác
Theâm theá naøo : xem moâ hình sau ...
11/10/2007 Trần Hạnh Nhi 20
Moâ hình toå chöùc phoái hôïp giöõa hai tieán trình
P1 P2
Job1; Chôø ;
Baùo hieäu ; Job2;
Nhieäm vuï cuûa laäp trình vieân:
Theâm caùc ñoaïn code ñoàng boä hoùa vaøo 2 chöông trình goác
Theâm theá naøo : xem moâ hình sau ...
Nhieàu tieán trình hôn thì sao ?
Khoâng coù moâ hình toång quaùt
Tuøy thuoäc baïn muoán heïn hoø ra sao☺
11/10/2007 Trần Hạnh Nhi 21
Noäi dung baøi giaûng
Xöû lyù ñoàng haønh vaø caùc vaán ñeà:
Vaán ñeà tranh ñoaït ñieàu khieån (Race Condition)
Vaán ñeà phoái hôïp xöû lyù
Baøi toaùn ñoàng boä hoùa
Yeâu caàu ñoäc quyeàn truy xuaát (Mutual Exclusion)
Yeâu caàu phoái hôïp xöû lyù (Synchronization)
Caùc giaûi phaùp ñoàng boä hoaù
Busy wating
Sleep & Wakeup
Caùc baøi toaùn ñoàng boä hoaù kinh ñieån
Producer – Consumer
Readers – Writers
Dinning Philosophers
11/10/2007 Trần Hạnh Nhi 22
Giaûi phaùp ñoàng boä hoaù
Moät phöông phaùp giaûi quyeát toát baøi toaùn ñoàng boä hoaù caàn
thoaû maûn 4 ñieàu kieän sau:
Mutual Exclusion : Khoâng coù hai tieán trình cuøng ôû trong
mieàn gaêng cuøng luùc.
Progess : Moät tieán trình taïm döøng beân ngoaøi mieàn gaêng
khoâng ñöôïc ngaên caûn caùc tieán trình khaùc vaøo mieàn gaêng
BoundedWaiting : Khoâng coù tieán trình naøo phaûi chôø voâ
haïn ñeå ñöôïc vaøo mieàn gaêng.
Khoâng coù giaû thieát naøo ñaët ra cho söï lieân heä veà toác ñoä
cuûa caùc tieán trình, cuõng nhö veà soá löôïng boä xöû lyù trong
heä thoáng.
11/10/2007 Trần Hạnh Nhi 23
Caùc giaûi phaùp ñoàng boä hoaù
Nhoùm giaûi phaùp Busy Waiting
Phaàn meàm
Söû duïng caùc bieán côø hieäu
Söû duïng vieäc kieåm tra luaân phieân
Giaûi phaùp cuûa Peterson
Phaàn cöùng
Caám ngaét
Chæ thò TSL
Nhoùm giaûi phaùp Sleep & Wakeup
Semaphore
Monitor
Message
11/10/2007 Trần Hạnh Nhi 24
Caùc giaûi phaùp “Busy waiting”
While (chöa coù quyeàn) donothing() ;
CS;
Töø boû quyeàn söû duïng CS
Tieáp tuïc tieâu thuï CPU trong khi chôø ñôïi vaøo mieàn gaêng
Khoâng ñoøi hoûi söï trôï giuùp cuûa Heä ñieàu haønh
11/10/2007 Trần Hạnh Nhi 25
Nhoùm giaûi phaùp Busy-Waiting
Caùc giaûi phaùp Busy Waiting
Caùc giaûi phaùp phaàn meàm
Giaûi phaùp bieán côø hieäu
Giaûi phaùp kieåm tra luaân phieân
Giaûi phaùp Peterson
Phaàn cöùng
Caám ngaét
Chæ thò TSL
11/10/2007 Trần Hạnh Nhi 26
while (lock == 1); // wait
lock = 1;
CS;
lock = 0;
int lock = 0
NonCS;
NonCS;
P0
while (lock == 1); // wait
lock = 1;
CS;
lock = 0;
NonCS;
NonCS;
P1
Giaûi phaùp phaàn meàm 1: Söû duïng bieán côø hieäu
11/10/2007 Trần Hạnh Nhi 27
while (lock == 1); // wait
lock = 1;
CS;
lock = 0;
int lock = 0
NonCS;
NonCS;
P0
while (lock == 1); // wait
lock = 1;
CS;
lock = 0;
NonCS;
NonCS;
P1
Giaûi phaùp phaàn meàm 1: Tình huoáng
11/10/2007 Trần Hạnh Nhi 28
Nhaän xeùt Giaûi phaùp phaàn meàm 1: Bieán côø hieäu
Coù theå môû roäng cho N tieán trình
Khoâng baûo ñaûm Mutual Exclusion
Nguyeân nhaân ?
Baûn thaân ñoaïn code kieåm tra vaø daønh quyeàn cuõng laø CS !
while ( lock == 1); // wait
lock = 1;Bò ngaét xöû lyù
Taøi nguyeân duøng chung
CS !
11/10/2007 Trần Hạnh Nhi 29
Giaûi phaùp phaàn meàm 2 : Kieåm tra luaân phieân
while (turn !=0); // wait
CS;
turn = 1;
int turn = 1
NonCS;
NonCS;
P0
while (turn != 1); // wait
CS;
turn = 0;
NonCS;
NonCS;
P1
11/10/2007 Trần Hạnh Nhi 30
Giaûi phaùp phaàn meàm 2 : Tình huoáng
int turn = 1
turn ==1
Wait...
CS;
turn = 1
NonCS;
CS ? (turn ==1)
P0
CS;
turn = 0;
NonCS...
P1
P0 khoâng vaøo ñöôïc CS laàn 2 khi P1 döøng trong NonCS !
11/10/2007 Trần Hạnh Nhi 31
Nhaän xeùt Giaûi phaùp 2: Kieåm tra luaân phieân
Chæ daønh cho 2 tieán trình
Baûo ñaûm Mutual Exclusion
Chæ coù 1 bieán turn, taïi 1 thôøi ñieåm chæ cho 1 tieán trình turn vaøo CS
Khoâng baûo ñaûm Progress
Nguyeân nhaân ?
“Môø cuûa” cho ngöôøi = “Ñoùng cöûa” chính mình !
11/10/2007 Trần Hạnh Nhi 32
Keát hôïp yù töôûng cuûa 1 & 2, caùc tieán trình chia seû:
int turn; //ñeán phieân ai
int interest[2] = FALSE; //interest[i] = T : Pi muoán vaøo CS
Giaûi phaùp phaàn meàm 3 : Peterson’s Solution
j = 1 – i;
interest[i] = TRUE;
turn = j;
while (turn==j && interest[j]==TRUE);
CS;
interest[i] = FALSE;
NonCS;
NonCS;
Pi
11/10/2007 Trần Hạnh Nhi 33
Giaûi phaùp phaàn meàm 3 : Peterson
i = 1 – j;
interest[j] = TRUE;
turn = i;
while (turn==i && interest[i]==TRUE);
CS;
interest[j] = FALSE;
NonCS;
NonCS;
Pj
11/10/2007 Trần Hạnh Nhi 34
Laø giaûi phaùp phaàn meàm ñaùp öùng ñöôïc caû 3 ñieàu kieän
Mutual Exclusion :
Pi chæ coù theå vaøo CS khi: interest[j] == F hay turn == i
Neáu caû 2 muoán veà thì do turn chæ coù theå nhaän giaù trò 0 hay 1 neân chæ coù 1
tieán trình vaøo CS
Progress
Söû duïng 2 bieán interest[i] rieâng bieät => traïng thaùi ñoái phöông khoâng
khoaù mình ñöôïc
Bounded Wait : interest[i] vaø turn ñeàu coù thay ñoåi giaù trò
Khoâng theå môû roäng cho N tieán trình
Nhaän xeùt giaûi phaùp phaàn meàm 3: Peterson
11/10/2007 Trần Hạnh Nhi 35
Nhaän xeùt chung veà caùc giaûi phaùp phaàn meàm trong nhoùm
Busy-Waiting
Khoâng caàn söï hoã trôï cuûa heä thoáng
Deã...sai, Khoù môû roäng
Giaûi phaùp 1 neáu coù theå ñöôïc hoã trôï atomicity thì seõ toát...
Nhôø ñeán phaàn cöùng ?
11/10/2007 Trần Hạnh Nhi 36
Nhoùm Busy-Waiting - Caùc giaûi phaùp phaàn cöùng
Caùc giaûi phaùp Busy Waiting
Caùc giaûi phaùp phaàn meàm
Giaûi phaùp bieán côø hieäu
Giaûi phaùp kieåm tra luaân phieân
Giaûi phaùp Peterson
Caùc giaûi phaùp phaàn cöùng
Caám ngaét
Test&Set lock Instruction
11/10/2007 Trần Hạnh Nhi 37
Nhoùm Busy-Waiting - Giaûi phaùp phaàn cöùng 1: Caám ngaét
Disable Interrupt;
CS;
Enable Interrupt;
NonCS;
NonCS;
Disable Interrupt : Caám moïi ngaét, keå caû ngaét ñoàng hoà
Enable Interrupt : Cho pheùp ngaét
11/10/2007 Trần Hạnh Nhi 38
Thieáu thaän troïng
Neáu tieán trình bò khoaù trong CS ?
System Halt
Cho pheùp tieán trình söû duïng moät leänh ñaëc quyeàn
Quaù ...lieàu !
Maùy coù N CPUs ?
Khoâng baûo ñaûm ñöôïc Mutual Exclusion
Giaûi phaùp phaàn cöùng 1: Caám ngaét
11/10/2007 Trần Hạnh Nhi 39
CPU hoã trôï primitive Test and Set Lock
Traû veà giaù trò hieän haønh cuûa 1 bieán, vaø ñaët laïi giaù trò True cho bieán
Thöïc hieän moät caùch khoâng theå phaân chia
Nhoùm Busy-Waiting - Giaûi phaùp phaàn cöùng 2: chæ thò TSL()
TSL (boolean &target)
{
TSL = target;
target = TRUE;
}
11/10/2007 Trần Hạnh Nhi 40
Aùp duïng TSL
while (TSL(lock)); // wait
CS;
lock = 0;
NonCS;
NonCS;
Pi
int lock = 0
11/10/2007 Trần Hạnh Nhi 41
Caàn ñöôïc söï hoã trôï cuûa cô cheá phaàn cöùng
Khoâng deã, nhaát laø treân caùc maùy coù nhieàu boä xöû lyù
Deã môû roäng cho N tieán trình
Nhaän xeùt chung caùc giaûi phaùp phaàn cöùng trong nhoùm Busy-
Waiting
11/10/2007 Trần Hạnh Nhi 42
Söû duïng CPU khoâng hieäu quaû
Lieân tuïc kieåm tra ñieàu kieän khi chôø vaøo CS
Khaéc phuïc
Khoaù caùc tieán trình chöa ñuû ñieàu kieän vaøo CS, nhöôøng CPU cho
tieán trình khaùc
Phaûi nhôø ñeán Scheduler
Wait and See...
Nhaän xeùt chung cho caùc giaûi phaùp trong nhoùm Busy
Waiting
11/10/2007 Trần Hạnh Nhi 43
Caùc giaûi phaùp ñoàng boä hoaù
Nhoùm giaûi phaùp Busy Waiting
Phaàn meàm
Söû duïng caùc bieán côø hieäu
Söû duïng vieäc kieåm tra luaân phieân
Giaûi phaùp cuûa Peterson
Phaàn cöùng
Caám ngaét
Chæ thò TSL
Nhoùm giaûi phaùp Sleep & Wakeup
Semaphore
Monitor
Message
11/10/2007 Trần Hạnh Nhi 44
Caùc giaûi phaùp “Sleep & Wake up”
if (chöa coù quyeàn) Sleep() ;
CS;
Wakeup( somebody);
Töø boû CPU khi chöa ñöôïc vaøo CS
Khi CS troáng, seõ ñöôïc ñaùnh thöùc ñeå vaøo CS
Caàn ñöôïc Heä ñieàu haønh hoã trôï
Vì phaûi thay ñoåi traïng thaùi tieán trình
11/10/2007 Trần Hạnh Nhi 45
YÙ töôûng
Heä Ñieàu haønh hoã trôï 2 primitive :
Sleep() : Tieán trình goïi seõ nhaän traïng thaùi Blocked
WakeUp(P): Tieán trình P nhaän traïng thaùi Ready
AÙp duïng
Sau khi kieåm tra ñieàu kieän seõ vaøo CS hay goïi Sleep() tuøy vaøo keát
quaû kieåm tra
Tieán trình vöøa söû duïng xong CS seõ ñaùnh thöùc caùc tieán trình bò
Blocked tröôùc ñoù
11/10/2007 Trần Hạnh Nhi 46
AÙp duïng Sleep() and Wakeup()
int busy; // busy ==0 : CS troáng
int blocked; // ñeám soá tieán trình bò Blocked chôø vaøo CS
if (busy) {
blocked = blocked + 1;
Sleep();
}
else busy = 1;
busy = 0;
if(blocked) { WakeUp(P);
blocked = blocked - 1;
}
CS;
11/10/2007 Trần Hạnh Nhi 47
Vaán ñeà vôùi Sleep & WakeUp
if (busy) {
blocked = blocked + 1;
Sleep();
}
else busy = 1;
busy = 0;
if(blocked) {
WakeUp(P);
blocked = blocked - 1;
}
CS;
if (busy) {
blocked = blocked + 1;
Sleep();
}
else busy = 1;
busy = 0;
if(blocked) {
WakeUp(P);
blocked = blocked - 1;
}
CS;
Nguyeân nhaân :
Vieäc kieåm tra ñieàu kieän vaø ñoäng taùc töø boû CPU coù theå bò ngaét quaõng
Baûn thaân caùc bieán côø hieäu khoâng ñöôïc baûo veä
P1 P2
P1 blocked
vónh vieãn
WakeUp
bò “laïc”
11/10/2007 Trần Hạnh Nhi 48
Caøi ñaët caùc giaûi phaùp Sleep & WakeUp ?
Heä ñieàu haønh caàn hoã trôï caùc cô cheá cao hôn
Döïa treân Sleep&WakeUp
Keát hôïp caùc yeáu toá kieåm tra
Thi haønh khoâng theå phaân chia
Nhoùm giaûi phaùp Sleep & Wakeup
Semaphore
Monitor
Message
11/10/2007 Trần Hạnh Nhi 49
Giaûi phaùp Sleep & Wakeup 1: Semaphore
Semaphore s; // s >=0
Ñöôïc ñeà nghò bôûi Dijkstra naêm 1965
Caùc ñaëc tính : Semaphore s;
Coù 1 giaù trò
Chæ ñöôïc thao taùc bôûi 2 primitives :
Down(s)
Up(s)
Caùc primitive Down vaø Up ñöôïc thöïc hieän khoâng theå phaân chia
11/10/2007 Trần Hạnh Nhi 50
Caøi ñaët Semaphore (Sleep & Wakeup)
Semaphore ñöôïc xem nhö laø moät resource
Caùc tieán trình “yeâu caàu” semaphore : goïi Down(s)
Neáu khoâng hoaøn taát ñöôïc Down(s) : chöa ñöôïc caáp resource
Blocked, ñöôïc ñöa vaøo s.L
Caàn coù söï hoã trôï cuûa HÑH
Sleep() & Wakeup()
typedef struct
{
int value;
struct process* L;
} Semaphore ;
Giaù trò beân trong cuûa semaphore
Danh saùch caùc tieán trình ñang
bò block ñôïi semaphore nhaän
giaù trò döông
11/10/2007 Trần Hạnh Nhi 51
Caøi ñaët Semaphore (Sleep & Wakeup)
Down (S)
{
S.value --;
if S.value < 0
{
Add(P,S.L);
Sleep();
}
}
Up(S)
{
S.value ++;
if S.value ≤ 0
{
Remove(P,S.L);
Wakeup(P);
}
}
11/10/2007 Trần Hạnh Nhi 52
Söû duïng Semaphore
Toå chöùc “ñoäc quyeàn truy xuaát” Pi
Down (s)
CS;
Up(s)
Toå chöùc “hoø heïn”
P1 :
Job1;
Up(s)
P2:
Down (s);
Job2;
Semaphore s = ?1
Semaphore s = ?0
11/10/2007 Trần Hạnh Nhi 53
Nhaän xeùt Semaphores
Laø moät cô cheá toát ñeå thöïc hieän ñoàng boä
Deã duøng cho N tieán trình
Nhöng yù nghóa söû duïng khoâng roõ raøng
MutualExclusion : Down & Up
Rendez-vous : Down & Up
Chæ phaân bieät qua moâ hình
Khoù söû duïng ñuùng
Nhaàm laãn
11/10/2007 Trần Hạnh Nhi 54
Giaûi phaùp Sleep & Wakeup 2: Monitor
Ñeà xuaát bôûi Hoare(1974) & Brinch (1975)
Laø cô cheá ñoàng boä hoaù do NNLT cung caáp
Hoã trôï cuøng caùc chöùc naêng nhö Semaphore
Deã söû duïng vaø kieåm soaùt hôn Semaphore
Baûo ñaûm Mutual Exclusion moät caùch töï ñoäng
Söû duïng bieán ñieàu kieän ñeå thöïc hieän Synchronization
11/10/2007 Trần Hạnh Nhi 55
Monitor : Ngöõ nghóa vaø tính chaát(1)
Laø moät module chöông trình ñònh nghóa
Caùc CTDL, ñoái töôïng duøng chung
Caùc phöông thöùc xöû lyù caùc ñoái töôïng naøy
Baûo ñaûm tính encapsulation
Caùc tieán trình muoán truy xuaát döõ lieäu
beân trong monitor phaûi duøng caùc phöông
thöùc cuûa monitor :
P1 : M.C() // i=5
P2: M.B() // printf(j)
MethodA
i=0
MethodB
prinf(j)
MethodC
i=5
Share variable: i,j;
Monitor M
11/10/2007 Trần Hạnh Nhi 56
Monitor : Ngöõ nghóa vaø tính chaát(2)
Töï ñoäng baûo ñaûm Mutual Exclusion
Taïi 1 thôøi ñieåm chæ coù 1 tieán trình ñöôïc thöïc
hieän caùc phöông thöùc cuûa Monitor
Caùc tieán trình khoâng theå vaøo Monitor seõ
ñöôïc ñöa vaøo Entry queue cuûa Monitor
Ví duï
P1 : M.A();
P6 : M.B();
P7 : M.A();
P8 : M.C();
MethodA
i = 0
MethodB
printf(i)
MethodC
i=5
P1
P8P7P6
Entry
queue
Share variable: i,j;
11/10/2007 Trần Hạnh Nhi 57
Monitor : Ngöõ nghóa vaø tính chaát(3)
Hoã trôï Synchronization vôùi caùc condition
variables
Wait(c) : Tieán trình goïi haøm seõ bò blocked
Signal(c): Giaûi phoùng 1 tieán trình ñang bò
blocked treân bieán ñieàu kieän c
C.queue : danh saùch caùc tieán trình blocked
treân c
Traïng thaùi tieán trình sau khi goïi Signal?
Blocked. Nhöôøng quyeàn vaøo monitor cho tieán
trình ñöôïc ñaùnh thöùc
Tieáp tuïc xöû lyù heát chu kyø, roài blocked
MethodA
i=0;
signal(c1)
MethodB
MethodC
wait(C1);
i=5
signal(C2 );
C1:
C2: P5
P4
P1
P3
P2
P8P7P6
Entry
queue
Share variable: i,j;
Condition variable:
P1
11/10/2007 Trần Hạnh Nhi 58
Söû duïng Monitor
Toå chöùc “ñoäc quyeàn truy xuaát”
Pi
M.AccessMutual(); //CS
Toå chöùc “hoø heïn”
P1 :
M.F1();
P2:
M.F2();
Monitor M
RC;
Function AccessMutual
CS; // access RC
Monitor M
Condition c;
Function F1
Job1;
Signal(c);
Function F2
Wait(c);
Job2;
11/10/2007 Trần Hạnh Nhi 59
Ñöôïc hoã trôï bôûi HÑH
Ñoàng boä hoùa treân moâi tröôøng phaân taùn
2 primitive Send & Receive
Caøi ñaët theo mode blocking
Server P
1. Send Request
2. Receive Accept
3. Send Finish
Giaûi phaùp Sleep & Wakeup 3: Message
11/10/2007 Trần Hạnh Nhi 60
Noäi dung baøi giaûng
Xöû lyù ñoàng haønh vaø caùc vaán ñeà:
Vaán ñeà tranh ñoaït ñieàu khieån (Race Condition)
Vaán ñeà phoái hôïp xöû lyù
Baøi toaùn ñoàng boä hoùa
Yeâu caàu ñoäc quyeàn truy xuaát (Mutual Exclusion)
Yeâu caàu phoái hôïp xöû lyù (Synchronization)
Caùc giaûi phaùp ñoàng boä hoaù
Busy waiting
Sleep & Wakeup
Caùc baøi toaùn ñoàng boä hoaù kinh ñieån
Producer – Consumer
Readers – Writers
Dinning Philosophers
11/10/2007 Trần Hạnh Nhi 61
Baøi toaùn ñoàng boä kinh ñieån 1:
Producer - Consumer (Bounded-Buffer Problem)
P
C
Buffer (N) ( )
Moâ taû : 2 tieán trình P vaø C hoaït ñoäng ñoàng haønh
P saûn xuaát haøng vaø ñaët vaøo Buffer
C laáy haøng töø Buffer ñi tieâu thuï
Buffer coù kích thöôùc giôùi haïn
Tình huoáng
P vaø C ñoàng thôøi truy caäp Buffer ?
P theâm haøng vaøo Buffer ñaày ?
C laáy haøng töø Buffer troáng ?
P khoâng ñöôïc ghi döõ lieäu vaøo buffer ñaõ ñaày (Rendez-vous)
C khoâng ñöôïc ñoïc döõ lieäu töø buffer ñang troáng (Rendez-vous)
P vaø C khoâng ñöôïc thao taùc treân buffer cuøng luùc (Mutual Exclusion)
11/10/2007 Trần Hạnh Nhi 62
Producer – Consummer : Giaûi phaùp Semaphore
Caùc bieán duøng chung giöõa P vaø C
BufferSize = N; // soá choã trong boä ñeäm
semaphore mutex = 1 ; // kieåm soaùt truy xuaát ñoäc quyeàn
semaphore empty = BufferSize; // soá choã troáng
semaphore full = 0; // soá choã ñaày
int Buffer[BufferSize]; // boä ñeäm duøng chung
11/10/2007 Trần Hạnh Nhi 63
Producer – Consummer : Giaûi phaùp Semaphore
Producer()
{
int item;
while (TRUE)
{
produce_item(&item);
down(&empty);
down(&mutex)
enter_item(item,Buffer);
up(&mutex);
up(&full);
}
}
Consumer()
{
int item;
while (TRUE)
{
down(&full);
down(&mutex);
remove_item(&item,Buffer);
up(&mutex);
up(&empty);
consume_item(item);
}
}
11/10/2007 Trần Hạnh Nhi 64
P&C - Giaûi phaùp Semaphore: Thinking...
Producer()
{
int item;
while (TRUE)
{
produce_item(&item);
down(&mutex)
down(&empty);
enter_item(item,Buffer);
up(&mutex);
up(&full);
}
}
Consumer()
{
int item;
while (TRUE)
{
down(&mutex);
down(&full);
remove_item(&item,Buffer);
up(&mutex);
up(&empty);
consume_item(item);
}
}
11/10/2007 Trần Hạnh Nhi 65
Producer – Consummer : Giaûi phaùp Monitor
monitor ProducerConsumer
condition full, empty;
int Buffer[N], count;
procedure enter();
{
if (count == N)
wait(full);
enter_item(item,Buffer);
count ++;
if (count == 1)
signal(empty);
}
procedure remove();
{
if (count == 0)
wait(empty)
remove_item(&item,Buffer);
count --;
if (count == N-1)
signal(full);
}
count = 0;
end monitor;
11/10/2007 Trần Hạnh Nhi 66
Producer – Consummer : Giaûi phaùp Monitor
Producer()
{
int item;
while (TRUE)
{
produce_item(&item);
ProducerConsumer.enter;
}
}
Consumer();
{
int item;
while (TRUE)
{
ProducerConsumer.remove;
consume_item(item);
}
}
11/10/2007 Trần Hạnh Nhi 67
Producer – Consummer : Giaûi phaùp Message
Producer()
{
int item;
message m;
while (TRUE)
{
produce_item(&item);
receive(consumer, Request);
create_message(&m, item);
send(consumer,&m);
}
}
Consumer();
{
int item;
message m;
for(0 to N)
send(producer, Request);
while (TRUE)
{
receive(producer, &m);
remove_item(&m,&item);
send(producer, Request);
consumer_item(item);
}
}
Coi chöøng
Deadlock
11/10/2007 Trần Hạnh Nhi 68
Baøi toaùn ñoàng boä hoaù kinh ñieån 2:
Readers & Writers
Moâ taû : N tieán trình Ws vaø Rs hoaït ñoäng ñoàng haønh
Rs vaø Ws chia seû CSDL
W caäp nhaät noäi dung CSDL
Rs truy caäp noäi dung CSDL
Tình huoáng
Caùc Rs cuøng truy caäp CSDL ?
W ñang caäp nhaät CSDL thì caùc Rs truy caäp CSDL ?
Caùc Rs ñang truy caäp CSDL thì W muoán caäp nhaät CSDL ?
W khoâng ñöôïc caäp nhaät döõ lieäu khi coù ít nhaát moät R ñang truy xuaát CSDL (ME)
Rs khoâng ñöôïc truy caäp CSDL khi moät W ñang caäp nhaät noäi dung CSDL (ME)
Taïi moät thôøi ñieåm , chæ cho pheùp moät W ñöôïc söûa ñoåi noäi dung CSDL (ME)
Database
R1
R2 R3
W1 W2
11/10/2007 Trần Hạnh Nhi 69
Readers-Writers vôùi “active readers”
11/10/2007 Trần Hạnh Nhi 70
Readers-writers vôùi moät “active writer”
11/10/2007 Trần Hạnh Nhi 71
Öu tieân ai hôn ñaây ?
11/10/2007 Trần Hạnh Nhi 72
Readers & Writers
W ñoäc quyeàn truy xuaát CSDL
W hieän taïi keát thuùc caäp nhaät CSDL : ai vaøo ?
Cho W khaùc vaøo, caùc Rs phaûi ñôïi
Öu tieân Writer, Reader coù theå starvation
Cho caùc Rs vaøo, Ws khaùc phaûi ñôïi
Öu tieân Reader, Writer coù theå starvation
11/10/2007 Trần Hạnh Nhi 73
Readers & Writers : Giaûi phaùp Semaphore
Caùc bieán duøng chung giöõa Rs vaø Ws
semaphore db = 1; // Kieåm tra truy xuaát CSDL
11/10/2007 Trần Hạnh Nhi 74
R&W : Giaûi phaùp Semaphore (1)
Reader()
{
down(&db);
read-db(Database);
up(&db);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
Chuyeän gì xaûy ra ?
Chæ coù 1 Reader ñöôïc ñoïc CSDL taïi 1 thôøi ñieåm !
11/10/2007 Trần Hạnh Nhi 75
R&W : Giaûi phaùp Semaphore (2)
Reader()
{
rc = rc +1;
if (rc ==1)
down(&db);
read-db(Database);
rc = rc – 1;
if (rc == 0)
up(&db);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
Ñuùng chöa ?
rc laø bieán duøng chung giöõa caùc
Reader...
CS ñoù/
11/10/2007 Trần Hạnh Nhi 76
Readers & Writers : Giaûi phaùp Semaphore
Caùc bieán duøng chung giöõa Rs vaø Ws
semaphore db = 1; // Kieåm tra truy xuaát CSDL
Caùc bieán duøng chung giöõa Rs
int rc; // Soá löôïng tieán trình Reader
semaphore mutex = 1; // Kieåm tra truy xuaát rc
11/10/2007 Trần Hạnh Nhi 77
R&W : Giaûi phaùp Semaphore (3)
Reader()
{
down(&mutex);
rc = rc +1;
if (rc ==1)
down(&db);
up(mutex);
read-db(Database);
down(mutex);
rc = rc – 1;
if (rc == 0)
up(&db);
up(mutex);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
Ai ñöôïc öu tieân ?
11/10/2007 Trần Hạnh Nhi 78
R&W : Giaûi phaùp Semaphore (Thinking...)
Reader()
{
down(&mutex);
rc = rc +1;
up(mutex);
if (rc ==1)
down(&db);
read-db(Database);
down(mutex);
rc = rc – 1;
up(mutex);
if (rc == 0)
up(&db);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
??? heâ, heâ, heâ ☺
11/10/2007 Trần Hạnh Nhi 79
R&W: Giaûi phaùp Monitor
monitor ReaderWriter
? Database;
procedure R1();
{
}
procedure R...();
{
}
procedure W1();
{
}
procedure W...();
{
}
monitor ReaderWriter
condition OKWrite, OKRead;
int rc = 0;
Boolean busy = false;
procedure BeginRead()
{
if (busy)
wait(OKRead);
rc++;
signal(OKRead);
}
procedure FinishRead()
{
rc--;
if (rc == 0)
signal(OKWrite);
}
procedure BeginWrite()
{
if (busy || rc != 0)
wait(OKWrite);
busy = true;
}
procedure FinishWrite()
{
busy = false;
if (OKRead.Queue)
signal(OKRead);
else
signal(OKWrite);
}
end monitor;
11/10/2007 Trần Hạnh Nhi 81
Reader&Writer : Giaûi phaùp Monitor
Reader()
{
RW.BeginRead();
Read-db(Database);
RW.FinishRead();
}
Writer();
{
RW.BeginWrite();
Write-db(Database);
RW.FinishWrite();
}
11/10/2007 Trần Hạnh Nhi 82
Baøi toaùn ñoàng boä hoaù kinh ñieån 3:
Böûa aên cuûa caùc Trieát gia (Dining Philosophers)
Naêm trieát gia ngoài chung quanh baøn
aên moùn spaghetti (yum..yum)
Treân baøn coù 5 caùi nóa ñöôïc ñaët giöõa 5 caùi
ñóa (xem hình)
Ñeå aên moùn spaghetti moãi ngöôøi caàn coù 2
caùi nóa
Trieát gia thöù i:
Thinking...
Eating...
Chuyeän gì coù theå xaûy ra ?
11/10/2007 Trần Hạnh Nhi 83
Dining Philosophers : Tình huoáng nguy hieåm
2 trieát gia “giaønh giaät” cuøng 1 caùi
nóa
Tranh chaáp
Caàn ñoàng boä hoaù hoaït ñoäng
cuûa caùc trieát gia
11/10/2007 Trần Hạnh Nhi 84
Dining Philosophers : Giaûi phaùp ñoàng boä
semaphore fork[5] = 1;
Philosopher (i)
{
while(true)
{
down(fork[i]);
down(fork[i+1 mod 5])
eat;
up(fork[i]);
up(fork[i+1 mod 5]);
think;
}
Deadlock
11/10/2007 Trần Hạnh Nhi 85
Dining Philosophers : Thaùch thöùc
Caàn ñoàng boä sao cho:
Khoâng coù deadlock
Khoâng coù starvation
4/6/2008 Trần Hạnh Nhi 1
Baøi giaûng 6 : Quaûn lyù boä nhôù
Toång quan
Nhu caàu boä nhôù cuûa tieán trình
Caùc vaán ñeà veà boä nhôù
Chuyeån ñoåi ñòa chæ
Caùc coâng ñoaïn
Caùc moâ hình chuyeån ñoåi ñòa chæ
Vai troø Quaûn lyù boä nhôù cuûa HÑH
Caùc yeâu caàu
Caùc moâ hình toå chöùc boä nhôù
Moâ hình Lieân tuïc
Moâ hình Khoâng lieân tuïc
4/6/2008 Trần Hạnh Nhi 2
Chöông trình caàn ñöôïc naïp vaøo Boä nhôù chính ñeå thi haønh
CPU chæ coù theå truy xuaát tröïc tieáp Main Memory
Chöông trình khi ñöôïc naïp vaoø BNC seõ ñöôïc toå chöùc theo caáu truùc cuûa
tieán trình töông öùng
Ai caáp phaùt BNC cho tieán trình ?
Chöông trình nguoàn söû duïng ñòa chæ symbolic
Tieán trình thöïc thi truy caäp ñiaï chæ thöïc trong BNC
Ai chuyeån ñoåi ñòa chæ ?
Toång quan : Nhu caàu veà boä nhôù cuûa tieán trình
HÑH
Boä phaän Quaûn lyù Boä nhôù
Moâ hình toå chöùc ? Cô cheá hoã trôï Chieán löôïc thöïc hieän
4/6/2008 Trần Hạnh Nhi 3
Toång quan : Caùc vaán ñeà veà Boä nhôù
Caáp phaùt Boä nhôù :
Uniprogramming : Khoâng khoù
Multiprogramming :
BNC giôùi haïn, N tieán trình ?
Baûo veä ? Chia seû ?
Tieán trình thay ñoåi kích thöôùc ?
Tieán trình lôùn hôn BNC ?
Chuyeån ñoåi ñòa chæ tieán trình
Thôøi ñieåm chuyeån ñoåi ñòa chæ ?
Coâng thöùc chuyeån ñoåi ?
Phuï thuoäc vaøo Moâ hình toå chöùc BNC ?
Caàn söï hoã trôï cuûa phaàn cöùng ?
Tieán trình thay ñoåi vò trí trong BNC ?
4/6/2008 Trần Hạnh Nhi 4
Ví duï
Neáu nachos caàn theâm khoâng gian ?
Neáu nachos coù loãi vaø thöïc hieän thao taùc ghi vaøo ñòa chæ 0x7100?
Khi naøo gcc bieát raèng noù thöôøng truù taïi 0x4000?
Neáu emacs caàn nhieàu boä nhôù hôn dung löôïng vaät lyù hieän coù?
OS
nachos
gcc
emacs 0x0000
0x4000
0x3000
0x7000
0x9000
Moâi tröôøng ña nhieäm
4/6/2008 Trần Hạnh Nhi 5
C program: test.c
Executable: test.exe
Compiler
Linker
Loader
Memory
Object:test.o
lib.o
Caùc böôùc chuyeån ñoåi chöông trình
Caùc böôùc chuyeån ñoåi
source program -> .exe
int x;
int y;
x = 12;
y = 5;
F();
A.C
F()
{
printf(“Hi”);
}
B.C
0 // x
2 // y
4 // [0] = 12;
5 // [2] = 5;
6 // jmp F
//external
// object
A.O B.O
0 -2 // F()
0 // F()
3 // x
5 // y
7 // [3] = 12;
8 // [5] = 5;
9 // jmp 0
? // F()
? // x
? // y
? // [?] = 12;
? // [?] = 5;
? // jmp ?
OS
Test.exe
4/6/2008 Trần Hạnh Nhi 8
Thuaät ngöõ
Ñòa chæ logic – coøn goïi laø ñòa chæ aûo , laø taát caû caùc ñòa chæ do
boä xöû lyù taïo ra
Ñòa chæ physic - laø ñòa chæ thöïc teá maø trình quaûn lyù boä nhôù
nhìn thaáy vaø thao taùc
Khoâng gian ñòa chæ – laø taäp hôïp taát caû caùc ñòa chæ aûo phaùt sinh
bôûi moät chöông trình
Khoâng gian vaät lyù – laø taäp hôïp taát caû caùc ñòa chæ vaät lyù töông
öùng vôùi caùc ñòa chæ aûo
4/6/2008 Trần Hạnh Nhi 9
Nhu caàu boä nhôù cuûa tieán trình
Tiến trình gồm có:
code segment
read from program file by exec
usually read-only
can be shared
data segment
initialized global variables (0 / NULL)
uninitialized global variables
heap
dynamic memory
e.g., allocated using malloc
grows against higher addresses
stack segment
variables in a function
stored register states (e.g. calling function
EIP)
grows against lower addresses
system data segment (PCB)
segment pointers
pid
program and stack pointers
Stack cho các thread
process A
low address
high address
...
8048314 :
8048314: push %ebp
8048315: mov %esp,%ebp
8048317: mov 0xc(%ebp),%eax
804831a: add 0x8(%ebp),%eax
804831d: pop %ebp
804831e: ret
804831f :
804831f: push %ebp
8048320: mov %esp,%ebp
8048322: sub $0x18,%esp
8048325: and $0xfffffff0,%esp
8048328: mov $0x0,%eax
804832d: sub %eax,%esp
804832f: movl $0x0,0xfffffffc(%ebp)
8048336: movl $0x2,0x4(%esp,1)
804833e: movl $0x4,(%esp,1)
8048345: call 8048314
804834a: mov %eax,0xfffffffc(%ebp)
804834d: leave
804834e: ret
804834f: nop
code segment
system data segment (PCB)
data segment
initialized variables
uninitialized variables
d
a
t
a
s
e
g
m
e
n
t
heap
stack
“ u n
u s e
d ”
m e
m o
r y
possible stacks
for more threads
4/6/2008 Trần Hạnh Nhi 10
Logical and Physical Address Spaces
4/6/2008 Trần Hạnh Nhi 11
Truy xuaát boä nhôù
Ñòa chæ cuûa Instruction vaø data trong program source code laø
symbolic:
goto errjmp;
X = A + B;
Nhöõng ñòa chæ symbolic naøy caàn ñöôïc lieân keát (bound) vôùi caùc ñòa chæ
thöïc trong boä nhôù vaät lyù tröôùc khi thi haønh code
Address binding: aùnh xaï ñòa chæ töø khoâng gian ñòa chæ (KGÑC) naøy
vaøo KGÑC khaùc
Thôøi ñieåm thöïc hieän address binding ?
compile time
load time
execution time.
4/6/2008 Trần Hạnh Nhi 12
Coù theå thöïc hieän vieäc keát buoäc ñòa chæ taïi 1 trong 3 thôøi
ñieåm :
Compile-time:
Phaùt sinh ñòa chæ tuyeät ñoái
Phaûi bieát tröôùc vò trí naïp chöông trình
Phaûi bieân dòch laïi chöông trình khi vò trí naïp thay ñoåi
Load-time:
Khi bieân dòch chæ phaùt sinh ñòa chæ töông ñoái
Khi naïp, bieát vò trí baét ñaàu seõ tính laïi ñòa chæ tuyeät ñoái
Phaûi taùi naïp khi vò trí baét ñaàu thay ñoåi
Execution-time:
Khi bieân dòch,naïp chæ phaùt sinh ñòa chæ tuong ñoái
Trì hoaõn thôøi ñieåm keât buoäc ñòa chæ tuyeät ñoái ñeán khi thi haønh
Khi ñoù ai tính toaùn ñòa chæ tuyeät ñoái ?
Phaàn cöùng : MMU
Thôøi ñieåm keát buoäc ñòa chæ ?
4/6/2008 Trần Hạnh Nhi 13
Chuyeån ñoåi ñòa chæ
gcc
virtual
address
Load Store
error
data
Translation box
CPU
legal addr?
Illegal?
Physical
memory
Physical
address
MMU
4/6/2008 Trần Hạnh Nhi 14
CPU, MMU and Memory
4/6/2008 Trần Hạnh Nhi 15
Yeâu caàu quaûn lyù boä nhôù
Taêng hieäu suaát söû duïng CPU
Caàn hoã trôï Multiprogramming
Löu tröõ cuøng luùc nhieàu tieán trình trong BNC ?
Caùc yeâu caàu khi toå chöùc löu tröõ tieán trình:
1. Relocation
2. Protection
3. Sharing
4. Logical Organization
5. Physical Organization
4/6/2008 Trần Hạnh Nhi 16
Khoâng bieát tröôùc chöông trình seõ ñöôïc naïp vaøo BN ôû vò trí
naøo ñeå xöû lyù.
Moät tieán trình coù theå ñöôïc di dôøi trong boä nhôù sau khi ñaõ
naïp C
Tieán trình taêng tröôûng ?
HÑH saép xeáp laïi caùc tieán trình ñeå coù theå söû duïng BNC hieäu quûa
hôn.
Taùi ñònh vò (Relocation)
4/6/2008 Trần Hạnh Nhi 17
Khoâng cho pheùp tieán trình truy caäp ñeán caùc vò trí nhôù ñaõ
caáp cho tieán trình khaùc (khi chöa coù pheùp).
Khoâng theå thöïc hieän vieäc kieåm tra hôïp leä taïi thôøi ñieåm
bieân dòch hay naïp, vì chöông trình coù theå ñöôïc taùi ñònh vò.
Thöïc hieän kieåm tra taïi thôøi ñieåm thi haønh
Caàn söï hoã trôï cuûa phaàn cöùng.
Baûo veä (Protection)
4/6/2008 Trần Hạnh Nhi 18
Caàn cho pheùp nhieàu tieán trình tham chieáu ñeán cuøng moät
vuøng nhôù maø khoâng toån haïi ñeán tính an toaøn heä thoáng :
Tieát kieäm choå löu tröõ cho caùc module duøng chung.
Cho pheùp caùc tieán trình coäng taùc coù khaû naêng chia seû döõ lieäu.
Chia seû (Sharing)
4/6/2008 Trần Hạnh Nhi 19
Ngöôøi duøng vieát chöông trình goàm nhieàu module, vôùi caùc
yeâu caàu baûo veä cho töøng module coù theå khaùc nhau:
instruction modules : execute-only.
data modules : read-only hay read/write.
moät soá module laø private, soá khaùc coù theå laø public.
OS caàn hoã trôï caùc cô cheá coù theå phaûn aùnh moâ hình logic
cuûa chuông trình
Toå chöùc logic (Logical Organization)
4/6/2008 Trần Hạnh Nhi 20
Toå chöùc vaät lyù (Physical Organization)
Caáp phaùt vuøng nhôù vaät lyù sao cho hieäu quaû
Vaø deã daøng chuyeån ñoåi chöông trình qua laïi giöõa BNC vaø
BNP
4/6/2008 Trần Hạnh Nhi 21
Caùc moâ hình toå chöùc boä nhôù
Caáp phaùt Lieân tuïc (Contigous Allocation)
Linker – Loader
Base & Bound
Caáp phaùt Khoâng lieân tuïc (Non Contigous Allocation)
Segmentation
Paging
4/6/2008 Trần Hạnh Nhi 22
Caáp phaùt Lieân tuïc (Contigous Allocation)
Nguyeân taéc :
Chöông trình ñöôïc naïp toaøn theå vaøo BNC ñeå thi haønh
Caàn moät vuøng nhôù lieân tuïc, ñuû lôùn ñeå chöùa Chöông trình
Khoâng gian ñòa chæ : lieân tuïc
Khoâng gian vaät lyù : coù theå toå chöùc
Fixed partition
Variable partition
2 moâ hình ñôn giaûn
Linker – Loader
Base & Bound
4/6/2008 Trần Hạnh Nhi 23
Fixed Partitioning
Phaân chia KGVL thaønh caùc
partitions
Coù 2 caùch phaân chia partitions :
kích thöôùc baèng nhau
kích thöôùc khaùc nhau
Moãi tieán trình seõ ñöôïc naïp vaøo
moät partition ñeå thi haønh
Chieán löôïc caáp phaùt partition ?
4/6/2008 Trần Hạnh Nhi 24
Chieán löôïc caáp phaùt partitions cho tieán trình
Kích thöôùc partition baèng nhau
khoâng coù gì phaûi suy nghó !
Kích thöôùc partition khoâng baèng
nhau :
Söû duïng nhieàu haøng ñôïi
Caáp cho tieán trình partition vôùi
kích thöôùc beù nhaát (ñuû lôùn ñeå
chöùa tieân trình)
Khuyeát ñieåm : phaân boá caùc tieán
trình vaøo caùc partition khoâng
ñeàu, moät soá tieán trình phaûi ñôïi
trong khi coù partition khaùc
troáng
4/6/2008 Trần Hạnh Nhi 25
Chieán löôïc caáp phaùt partitions cho tieán trình
Kích thöôùc partition khoâng baèng
nhau :
Söû duïng 1 haøng ñôïi
Caáp cho tieán trình partition töï
do vôùi kích thöôùc beù nhaát (ñuû
lôùn ñeå chöùa tieân trình)
Caàn duøng moät CTDL ñeå theo
doõi caùc partition töï do
4/6/2008 Trần Hạnh Nhi 26
Nhaän xeùt Fixed Partitioning
Söû duïng BN khoâng hieäu quaû
internal fragmentation : kích thöôùc chöông trình khoâng ñuùng baèng kích thöôùc
partition
Möùc ñoä ña chöông cuûa heä thoáng (Soá tieán trình ñöôïc naïp) bò giôùi haïn
bôûi soá partitions
3M
8M
P1 (2M)
P2 (4M)
internal frag
internal frag
4/6/2008 Trần Hạnh Nhi 27
Dynamic Partitioning
BNC khoâng ñöôïc phaân chia
tröôùc
Caùc partition coù kích thöôùc tuøy yù,
seõ hình thaønh trong quaù trình naïp
caùc tieán trình vaøo heä thoáng
Moãi tieán trình seõ ñöôïc caáp phaùt
ñuùng theo kích thöôùc yeâu caàu
khoâng coøn internal fragmentation
P1 (2M)
P2 (4M)
Dynamic Partitioning: tình huoáng
Choïn löïa partition ñeå caáp phaùt cho tieán trình ?
Ñoàng thôøi coù nhieàu partition töï do ñuû lôùn ñeå chöùa tieán trình
Dynamic Allocation problem
Tieán trình vaøo sau khoâng laáp ñaày choã troáng tieán trình tröôùc ñeå laïi
external fragmentation
P1 (2M)
P2 (4M)
P3 (8M)
2M
P4 (1.5M)
external
fragmentation
4/6/2008 Trần Hạnh Nhi 29
Ví duï Dynamic Partitioning
4/6/2008 Trần Hạnh Nhi 30
Ví duï Dynamic Partitioning
4/6/2008 Trần Hạnh Nhi 31
Giaûi quyeát vaán ñeà Dynamic Allocation
Caùc chieán löôïc thoâng duïng ñeå choïn partition:
First-fit: choïn partition töï do ñaàu tieân
Best-fit: choïn partition töï do nhoû nhaát ñuû chöùa tieán trình
Worst-fit: choïn partition töï do lôùn nhaát ñuû chöùa tieán trình
2M
P1
8M
P3 (1M)
P2
1.5M
Worst Fit
First Fit
Best Fit
4/6/2008 Trần Hạnh Nhi 32
Memory Compaction (Garbage Collection)
Giaûi quyeát vaán ñeà External Fragmentation :
Doàn caùc vuøng bò phaân maûnh laïi vôùi nhau ñeå taïo thaønh partition lieân tuïc ñuû lôùn
ñeå söû duïng
Chi phí thöïc hieän cao
2M
P1
1M
External
fragmentations
P2
1.5M
4/6/2008 Trần Hạnh Nhi 33
Caùc moâ hình chuyeån ñoåi ñòa chæ
Fixed/Dynamic partition laø moâ hình toå chöùc naïp tieán trình
vaøo KGVL
Caàn coù moâ hình ñeå chuyeån ñoåi ñòa chæ töø KGÑC vaøo KGVL
Linker Loader
Base & Bound
4/6/2008 Trần Hạnh Nhi 34
Moâ hình Linker-Loader
Taïi thôøi ñieåm Link, giöõ laïi caùc ñòa chæ logic
Vò trí base cuûa tieán trình trong boä nhôù xaùc ñònh ñöôïc vaøo thôøi
ñieåm naïp :
ñòa chæ physic = ñòa chæ logic + base
0x0000
test.exe
0x4000
0x3000
test.exe
jump 0x2000 jump 0x5000
0x7000
OS
(base)
4/6/2008 Trần Hạnh Nhi 35
Nhaän xeùt moâ hình Linker-Loader
Khoâng caàn söï hoã trôï phaàn cöùng ñeå chuyeån ñoåi ñòa chæ
Loader thöïc hieän
Baûo veä ?
Khoâng hoã trôï
Dôøi chuyeån sau khi naïp ?
Khoâng hoã trôï taùi ñònh vò
Phaûi naïp laïi !
4/6/2008 Trần Hạnh Nhi 36
Moâ hình Base & Bound
0x0000
Test.exe
0x4000
Base
0x3000
OS
Test.exe
jump 0x2000 jump 0x2000
Bound
0x7000
Taïi thôøi ñieåm Link, giöõ laïi caùc ñòa chæ logic
Vò trí base , bound ñöôïc ghi nhaän vaøo 2 thanh ghi:
Keát buoäc ñòa chæ vaøo thôøi ñieåm thi haønh => taùi ñònh vò ñöôïc :
ñòa chæ physic = ñòa chæ logic + base register
Baûo veä : ñòa chæ hôïp leä⊆ [base, bound]
4/6/2008 Trần Hạnh Nhi 37
Nhaän xeùt moâ hình Base & Bound
Hoã trôï
Baûo veä
Taùi ñònh vò
MMU
+ base reg
logical addrs
memory
physical
addrs
CPU
Keát buoäc ñòa chæ taïi thôøi ñieåm thi haønh => caàn hoã trôï cuûa phaàn cöùng
4/6/2008 Trần Hạnh Nhi 38
Khuyeát ñieåm cuûa caáp phaùt lieân tuïc
Khoâng coù vuøng nhôù lieân tuïc ñuû lôùn ñeå naïp tieán trình ?
Boù tay ...
Söû duïng BNC khoâng hieäu qua”!
1M
P1
8M
P3 (9M)
P2
1M
4/6/2008 Trần Hạnh Nhi 39
Caùc moâ hình toå chöùc boä nhôù
Caáp phaùt Lieân tuïc (Contigous Allocation)
Linker – Loader
Base & Bound
Caáp phaùt Khoâng lieân tuïc (Non Contigous Allocation)
Segmentation
Paging
4/6/2008 Trần Hạnh Nhi 40
Caùc moâ hình caáp phaùt khoâng lieân tuïc
Cho pheùp naïp tieán trình vaøo BNC ôû nhieàu vuøng nhôù khoâng
lieân tuïc
Khoâng gian ñòa chæ : phaân chia thaønh nhieàu partition
Segmentation
Paging
Khoâng gian vaät lyù : coù theå toå chöùc
Fixed partition : Paging
Variable partition : Segmentation
4/6/2008 Trần Hạnh Nhi 41
Segmentation
Laäp trình vieân : chöông trình laø moät taäp caùc segments
Moät segment laø moät ñôn vò chöông trình goàm caùc ñoái töôïng coù cuøng nhoùm ngöõ
nghóa
Ví duï : main program, procedure, function, local variables, global
variables,common block,stack, symbol table, arrays...
Caùc segment coù theå coù kích thöôùc khaùc nhau
Moâ hình Segmentation :
KGÑC : phaân chia thaønh caùc segment
KGVL : toå chöùc thaønh dynamic partitions
Naïp tieán trình :
Moãi segment caàn ñöôïc naïp vaøo moät partition lieân tuïc, töï do, ñuû lôùn cho
segment
partition naøo ? ...Dynamic Allocation !
Caùc segment cuûa cuøng 1 chöông trình coù theå ñöôïc naïp vaøo nhöõng partition
khoâng lieân tuïc
4/6/2008 Trần Hạnh Nhi 42
Moâ hình Segmentation
KGVL
int m;
main ()
{
F1(m);
}
F1(int x)
{ x = 9;
}
code
(main,F1)
data
(m)
stack
heap
KGDCQuaûn lyù ñòa chæ ?
4/6/2008 Trần Hạnh Nhi 43
Toå chöùc Segmentation
Ñiaï chæ logic :
Ñòa chæ physic :
Chuyeån ñoåi ñòa chæ : Ö
Chuyeån ñoåi ñòa chæ vaøo thôøi ñieåm thi haønh
MMU thi haønh
Söû duïng Segment Table (baûng phaân ñoaïn) ñeå löu thoâng tin caáp phaùt BNC, laøm cô
sôû thöïc hieän aùnh xaï ñòa chæ
Moãi tieán trình coù moät Segment Table
Sâegment Table:
Soá phaàn töû cuûa Segment Table = Soá Segment cuûa chöông trình
Moãi phaàn töû cuûa Segment Table moâ taû cho 1 segment, vaø coù caáu truùc :
base: ñòa chæ vaät lyù trong BNC cuûa partition chöùa segment
limit : kích thöôùc segment
Löu tröõ Segment Table ?
Cache : neáu ñuû nhoû
BNC : Segment-table base register (STBR), Segment-table length register (STLR)
4/6/2008 Trần Hạnh Nhi 44
Chuyeån ñoåi ñòa chæ trong moâ hình Segmentation
Logical Addr
Seg# offset
3 128
Seg table
base limit
3 0x1000 512
mem
seg
128
+ 0x1000?
yes
no
fault
0
1
2
4/6/2008 Trần Hạnh Nhi 45
Logical-to-Physical Address Translation in segmentation
4/6/2008 Trần Hạnh Nhi 46
Nhaän xeùt Moâ hình Segmentation
Caáp phaùt khoâng lieân tuïc => taän duïng boä nhôù hieäu quaû
Hoã trôï taùi ñònh vò
Töøng Segment
Hoã trôï Baûo veä vaø Chia seû ñöôïc ôû möùc module
YÙ nghóa cuûa “möùc module” ?
/ Chuyeån ñoåi ñòa chæ phöùc taïp
☺ Ñaõ coù MMU...
/ Söû duïng dynamic partition : chòu ñöïng
/ Dynamic Allocation : choïn vuøng nhôù ñeå caáp cho moät segment
☺ First fit, Best fit, Worst fit
/ External Fragmentation :
/ Memory Compaction : chi phí cao
4/6/2008 Trần Hạnh Nhi 47
Sharing of
Segments:
Text Editor
4/6/2008 Trần Hạnh Nhi 48
Paging
Hoã trôï HÑH khaéc phuïc baøi toaùn caáp phaùt boä nhôù ñoäng, vaø loaïi boû
external fragmentation
Moâ hình Paging :
KGÑC : phaân chia chöông trình thaønh caùc page coù kích thöôùc baèng nhau
Khoâng quan taâm ñeán ngöõ nghóa cuûa caùc ñoái töôïng naèm trong page
KGVL : toå chöùc thaønh caùc fixed partitions coù kích thöôùc baèng nhau goïi laø frame
page size = frame size
Naïp tieán trình :
Moãi page caàn ñöôïc naïp vaøo moät frame töï do
Caùc pages cuûa cuøng 1 chöông trình coù theå ñöôïc naïp vaøo nhöõng frames
khoâng keá caän nhau.
Tieán trình kích thöôùc N pages -> caàn N frame töï do ñeå naïp
4/6/2008 Trần Hạnh Nhi 49
Moâ hình Paging
KGVL
int m;
main ()
{
F1(m);
}
F1(int x)
{ x = 9;
}
KGDC
Quaûn lyù ñòa chæ ?
int m;
main ()
F1(int x)
stack
heap
4/6/2008 Trần Hạnh Nhi 50
Toå chöùc Paging
Ñiaï chæ logic :
Ñòa chæ physic :
Chuyeån ñoåi ñ
Các file đính kèm theo tài liệu này:
- tailieu.pdf