TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI****************
BÁO CÁO MÔN HỌC
HỆ ĐIỀU HÀNH(Mã học phần)
ĐỀ TÀI: Xây dựng chương trình minh họa giải pháp cho bài toán
Người thợ cắt tóc
ĐIỂMNHẬN XÉT VÀ CHỮ KÝ CỦA GIẢNG VIÊN
Sinh viên thực hiện: Lê Duy Anh Dũng - 20198170 Trần Trung Dũng - 20198171
Lê Đức Mạnh - 20198189 Lớp: IT-GINP- K64
Giảng viên hướng dẫn: Đỗ Quốc Huy
Hà Nội, tháng 12 năm 2021
Trang 2Lời nói đầu
Nguyên lý hệ điều hành là bộ môn có những kiến thức căn bảnlà nền tảng mà mỗi lập trình viên phải hiểu rõ để phục vụ cho nhữngkiến thức cao hơn Hệ điều hành là tập hợp các chương trình phầnmềm chạy trên máy tính dùng để điều hành, quản lý các thiết bịphần cứng và tài nguyên phần mềm trên máy tính Hệ điều hànhđóng vai trò trung gian trong việc giao tiếp giữa người sử dụng vàphần cứng máy tính, cung cấp một môi trường cho phép người sửdụng phát triển và thực hiện các ứng dụng một cách dễ dàng.
Cùng với sự phát triển của mạng Internet hiện nay thì việcnghiên cứu nắm vững những kiến thức về mạng là rất quan trọng.Dựa trên những hiểu biết của mình và tìm hiểu tài liệu, nhóm em đãchọn nghiên cứu và thực hiện đề tài: Bài toán Sleeping BarberProblem
Nhóm em xin chân thành cảm ơn thầy cô khoa Công NghệThông Tin đã tạo điều kiện để em nghiên cứu kĩ hơn những kiếnthức này và đặc biệt là thầy giáo Đỗ Quốc Huy đã nhiệt tình giảngdạy, hướng dẫn nhóm em trong quá trình thực hiện đề tài này Dokiến thức còn hạn hẹp, nên không thể tránh khỏi những sai sót trongquá trình làm đề tài, chúng em rất mong nhận được sự góp ý củathầy cô để sản phẩm được hoàn thiện hơn Chúng em xin chân thànhcảm ơn
Nhóm sinh viên thực hiện: Lê Duy Anh Dũng - 20198170 Trần Trung Dũng - 20198171 Lê Đức Mạnh – 20198189
Trang 3Mục Lục
Phần 1: Giới thiệu đề tài 1
1.1Mô tả bài toán 1
Trang 4Phần 1: Giới thiệu đề tài
Trong một cửa hàng cắt tóc gồm một người thợ cắt tóc, một ghế ngồi trong phòng cắt tóc, và n ghế ngồi tại phòng chờ+ Nếu không có ai đến cắt tóc, người thợ sẽ nằm ngủ.
+ Mỗi khi có khách hàng đến, họ sẽ kiểm tra xem người thợ đang làm gì Nếu người thợ ngủ, khách hàng sẽ đánh thức anh tadậy và ngồi vào ghế cắt tóc.
+ Nếu người thợ đang làm việc, khách hàng sẽ tới phòng chờ, ngồi vào một trong n chiếc ghế, đợi đến lượt
+ Khi người thợ cắt xong cho một vị khách, anh ta để vị khách đó ra về và tới phòng chờ để kiểm tra xem có khách hàng nào đang chờ đợi không, nếu có, anh ta sẽ đưa vị khách vào phòng cắt tóc, nếu không, anh quay về phòng nằm ngủ.
+ Nếu khách hàng đến vào lúc toàn bộ n ghế đã được chiếm dụng, vị khách sẽ ra về
Hình ảnh minh họa bài toán
1
Trang 51.2 Mô tả vấn đề
+ Dựa trên một phân tích sơ sài, các quyết định trên cần đảm
bảo rằng cửa hàng hoạt động chính xác, thợ cắt tóc cắt tóc của bất cứ ai đến cho đến khi không còn khách hàng, và sau đó ngủ cho đến khi khách hàng tiếp theo đến Trong thực tế, có một số vấn đề có thể xảy ra minh họa cho các vấn đề về lập lịch biểu chung.
+ Tất cả các vấn đề đều liên quan đến thực tế là các hành động của cả thợ cắt tóc và khách hàng (kiểm tra phòng chờ, vào cửa hàng, lấy ghế trong phòng chờ,….) đều mất một khoảng thờigian không xác định
+ Ví dụ, khi một khách hàng có thể đến và quan sát thấy thợ cắt tóc đang cắt tóc, vì vậy anh ta đi vào phòng chờ Trong khi họ đang trên đường đến, người thợ cắt tóc hoàn thành kiểu tóc hiện tại của họ và đi kiểm tra phòng chờ Vì không có ai ở đó (có thể phòng chờ ở xa và người thợ cắt tóc đi nhanh hơn khi lướt qua khách hàng, hoặc có thể khách hàng đã đi vào nhà vệ sinh hoặc đi về phía chiếc ghế và người thợ cắt tóc nghĩ rằng anh ta đã rời đi), vì vậy người thợ cắt tóc đi trở lại ghế của họ vàngủ Người thợ cắt tóc bây giờ đang đợi khách hàng, nhưng khách hàng đang đợi thợ cắt tóc Hoàn cảnh trên sẽ dẫn đến hiệntượng deadlock - xảy ra khi cả khách hàng và thợ cắt tóc đều cùng chờ đợi lẫn nhau.
+ Trong một tình huống khác, hai khách hàng có thể đến cùnglúc khi xảy ra tình trạng chỉ còn một chỗ ngồi trong phòng
chờ Họ quan sát thấy người thợ cắt tóc đang cắt tóc, đi vào phòng chờ và cả hai định chiếm chiếc ghế đơn.
2
Trang 6+ Starvation xảy ra khi một khách hàng phải chờ đợi trong một thời gian dài, khi những khách hàng khác không tuân theo trật tự, hoặc thợ cắt tóc gọi khách một cách ngẫu nhiên.
Phần 2: Giải quyết bài toán 2.1 Giải pháp
Để giải quyết bài toán cũng như vấn đề deadlock và starvation, ta sử dụng ba biến semaphore
+ Cần thêm một biến FreeSeat để đếm số lượng ghế trống hiện tại, khách hàng sẽ ngồi vào nếu còn ghế trống, nếu không, kháchhàng rời đi.
+ Khi thợ cắt tóc bắt đầu tiến hành tiến trình barber vào buổi sáng, vì biến semaphore customers đang là 0 nên anh ta sẽ bị chặn, bước vào trạng thái ngủ, chờ khách hàng đầu tiên xuất hiện.
+ Khi một vị khách đến, người đó sẽ thực hiện tiến trình
customer, đồng thời yêu cầu biến AccessSeat để có thể bước vàovùng khẩn cấp (crictical region) - tức phòng cắt tóc Nếu ngay sau đó có một vị khách nữa đến, người đó sẽ không thể vào vùng khẩn cấp cho tới khi vị khách đầu tiên giải phóng biến AccessSeat.
+ Vị khách đó sẽ kiểm tra số lượng ghế trong phòng chờ, nếu số lượng khách chờ ít hơn số lượng ghế, vị khách ngồi xuống Ngược lại, vị khách rời đi, và giải phóng AccessSeat nếu có
3
Trang 7+ Khi vị khách ngồi xuống ghế trong phòng chờ, người đó sẽ đồng thời giảm biến FreeSeat và tăng biến semaphore customers- đánh thức thợ cắt tóc nếu anh ta đang ngủ.
+ Lúc đó, cả thợ cắt tóc và khách hàng đều đã sẵn sàng Khách hàng giải phóng AccessSeat, người thợ nhận lấy và bắt đầu làm việc
+ Khi đã cắt tóc xong, khách hàng sẽ ra khỏi tiến trình và rời đi Các bước trên cứ thế lần lượt Nếu semaphore customers bằng 0, người thợ sẽ lại về trạng thái ngủ cho tới khi hết giờ làm
2.2.1 Sơ đồ
Closing time
Trang 82.2.2 Thuật toán
Semaphore Customers = 0; Semaphore Barber = 0; Mutex AccessSeat = 1; int FreeSeats = N;
Barber {
while(true) {
/*Trạng thái ngủ - chờ đợi khách hàng */ down(Customers);
/*Giảm biến mutex, bảo vệ số lượng ghế khả dụng.*/ down(AccessSeat);
/*Ghế trống tăng lên.*/ FreeSeats++;
/* Đưa khách hàng đi cắt tóc*/ up(Barber);
/*Giải phóng biến mutex về ghế.*/ up(AccessSeat);
/*Người thợ cắt tóc*/ }
}
5
Trang 9/*Nếu số lượng ghế trống còn lớn hơn 0*/ if(FreeSeats > 0) {
}
6