SlideShare a Scribd company logo
3. chia sẻ tài nguyên
có 1 số tài nghuyền cần chia sẻ: vùng nhớ, i/o unit (uart, spi), thanh ghi, biến, cấu trúc dữ
liệu... ko cho phép truy xuất đồng thời (chỉ 1 task đc sd).
kỹ thuật:
semaphore.
ko cho phép ngắt, chiếm quyền.
mutex.
3.1 semaphore
link video bài giảng của thầy
3.1.1 lý thuyết
osSemaphoreNew: tạo ra 1 semaphore (có thể tạo nhiều semaphore nhưng sẽ nói
sau), semaphore có thể hiểu là 1 token hoặc 1 bit , 1cờ (semaphore =1.
khi task thực hiện lệnh osSemaphoreRelease thì task đó sẽ thiết lập semaphore = 1;
task dùng lệnh osSemaphoreAcquire để kiểm tra semaphore có = 1 ko, nếu
semaphore = 1 thì task sẽ đặt lại semaphore đó = 0 và thực hiện các câu lênh bên
dưới. Nếu task kiểm tra semaphore = 0 thì task đó sẽ ở hàng đợi semaphore (trạng
thái lock).
khi task thực hiện các lệnh bên dưới osSemaphoreAcquire thì task vẫn có thể bị
chiếm quyền như bình thường và bị đẩy vào ready hoặc bị block.
yêu cầu task sử dụng tài nguyên phải thực hiện thật nhanh tránh việc lock task ưu
tiên cao hơn quá lâu (dù có task có ưu tiên cao hơn mà ko có semaphorre thì vẫn bị
lock) hoặc chiếm quyền task có ưu tiên thấp thấp hơn quá lâu (do có mức ưu tiên
thấp hơn nên vẫn ở trạng thái ready).
1 tài nguyên có thể có nhiều semaphore-1 nhà vệ cho phép nhiều người vào cùng lúc
(semaphore counting: 1 lệnh tạo nhiều semaphore hoặc nhiều lệnh semaphore
binary tạo nhiều semaphore riêng rẽ),
1 semaphore cho nhiều tài nguyên (trên nguyên lý là đc nhưng ko mấy khi làm kiểu
này vì nó giống nhiều phòng vệ sinh nhưng chỉ có 1 chìa khoá để khoá).
3.1.2 các hàm sử dụng
//thuộc tính semaphore
osSemaphoreId_t myBinarySem01Handle;
const osSemaphoreAttr_t myBinarySem01_attributes = {
.name = "myBinarySem01"
};
3.1.3 thiết lập cubemx
tạo binary semaphore (tạo 1 semaphore)
3.1.4 các chương trình ví dụ
link video bài giảng của thầy
3.1.4.1 ví dụ chương trình 6 2h2500 trong video):
các task cùng mức ưu tiên dùng semaphore khi lam việc chung trên uart.
//khởi tạo 1 semaphore, available semaphore = 1
myBinarySem01Handle = osSemaphoreNew(1, 1, &myBinarySem01_attributes);
//giải phóng semaphore có id là myBinarySem01Handle (thiết lập semaphor =1)
osSemaphoreRelease(myBinarySem01Handle);
//kiểm ta có semaphore ko (kiểm tra semaphore có id myBinarySem01Handle có bằng
1 ko), chờ trong khoảng thời gian osWaitForever (liên tục cho đến khi có
semaphore)
osSemaphoreAcquire(myBinarySem01Handle, osWaitForever);
link project, chương trình 6 copy từ file main.c
3.1.4.2 ví dụ chương trình 7 2h:4000
high task (dùng uart cần semaphore), default task (dùng uart cần semaphore, nhận sự
kiện nút nhấn), low task ko cần semaphore.
link project, chương trình 7 copy từ file main.c
vấn đề: default task chờ nhấn nút ko trả semaphore, đến time slice thì high task running
vào yêu cầu semaphore nhưng ko có semaphore nên bị lock . default task có mức ưu tiên
cao hơn low task nên chiếm hết time slice nhưng chẳng làm gì chỉ chờ nhấn nút.
3.1.4.3 chương trình 8 2h:4200
nếu đổi nhiệm vụ low task và default task thì low task chờ nhấn nút vẫn lock high task,
default task mức ưu tiên cao hơn low task và ko cần semaphore nên chiếm hết time slice
→ chương trình thực tài nguyên chung cần đc thực hiện nhanh.
link project, chương trình 8 copy từ file main.c
3.2 disable tất cả các ngắt, chiếm quyền
taskENTER_CRITICAL;
//lệnh thực thi trong phần này ko có ngắt can thiệp→ ko hay nếu task này bị treo
taskEXIT_CRITICAL;
ko cho phép task khác có ưu tiên cao hơn chiếm quyền của nó khi nó đang thực hiện tài
nguyên quan trọng , cho nó thực hiện chọn vẹn công việc .
3.4 mutex
link video bài giảng của thầy
3.4.1 lý thuyết
nguyên lý cũng gần tương tự semaphore chỉ khác khi 1 task kiểm tra semaphore = 0
thì task đó ngoại việc bị lock thì nó sẽ kiểm tra task làm semaphore =0 (task giữa
semaphore) có mức ưu tiên thấp hơn task bị lock thì task giữ semaphore sẽ đc setup
lên cùng mức ưu tiên với task đang bị lock.
giúp task đang giữ semaphore thực hiện nhanh hơn (ít bị task khác chiếm quyền
hơn), task bị lock nhanh đc giải phóng hơn.
khi chia sẻ tài nguyền dùng chung thì 1 task có thể kế thừa các mức ưu tiên khác
nhau
deadlock: các tài nguyên khoá lẫn nhau, j2 cần a j1 cần b
kế thừa mức ưu tiên bắc cầu: j3 kế thừa mức ưu tiên của j1 thông qua j2.
3.4.2 các hàm thư viện sử dụng
các lệnh sử dụng tương tự semaphore chỉ cần thay thế semaphore→ mutex.
3.4.3 thiết lập cubemx
trong phần cubemx thêm mutexes
3.4.4 các chương trình ví dụ
link video bài giảng của thầy
3.4.4.1 chương trình 9
tương tự chương trình 8 nhưng thay semaphore bằng mutex
link project, chương trình 8 copy từ file main.c

More Related Content

PDF
Rtos 4 queue vs interrupt
PDF
FREERTOS_với_ESP32_IOTCHIP_GOODDDDDDDDDD
PDF
Rtos 2: time slice vs preeption (cùng mức ưu tiên vs có chiếm quyền
PPTX
TL5.4.1 - #Week10-Chapter5-3.pptx - Hệ ddieuf hành
PDF
RTOS 5 event vs notify
PPTX
Threads - Lập trình hệ thống IT4786
PDF
De tai he dieu hanh nam 2010 2011
PDF
Bai tap ly thuyet He dieu hanhBai tap ly thuyet He dieu hanh.pdf
Rtos 4 queue vs interrupt
FREERTOS_với_ESP32_IOTCHIP_GOODDDDDDDDDD
Rtos 2: time slice vs preeption (cùng mức ưu tiên vs có chiếm quyền
TL5.4.1 - #Week10-Chapter5-3.pptx - Hệ ddieuf hành
RTOS 5 event vs notify
Threads - Lập trình hệ thống IT4786
De tai he dieu hanh nam 2010 2011
Bai tap ly thuyet He dieu hanhBai tap ly thuyet He dieu hanh.pdf

Similar to Rtos 3 semaphore vs mutex (20)

DOCX
Kiến trúc máy tính và hệ điều hành - Nhóm 2
PPT
Bai04 quan ly tien trinh
PDF
Python Beginner Class day-14-thread
PPT
Os 3 - synchronization
PPT
Linux+02
PPT
Bai-3 HDH Mang và cơ chế an toàn của hđh.ppt
PDF
Slide bài giảng Hệ điều hành hutech_os_fullslides_aug2016.pdf
DOC
--De cuong on tap hdh
PDF
[Duong tran] shared_variable
PDF
Chuong6 deadlock-091006115413-phpapp01
PDF
He dieu hanh
 
PDF
Bài Giảng Quản Lý Tiến Trình Trong Hệ Điều Hành
PPTX
Hệ điều hành
PPTX
#Week01-Chapter1 2023DE THI CSDL CAP CAO TOÀN QUÓC
PDF
Tìm hiểu về process
PPTX
HDH-Chuong6 Ngăn độc quyền truy xuất olie
PDF
Introduction to os1 12 visio unicode
Kiến trúc máy tính và hệ điều hành - Nhóm 2
Bai04 quan ly tien trinh
Python Beginner Class day-14-thread
Os 3 - synchronization
Linux+02
Bai-3 HDH Mang và cơ chế an toàn của hđh.ppt
Slide bài giảng Hệ điều hành hutech_os_fullslides_aug2016.pdf
--De cuong on tap hdh
[Duong tran] shared_variable
Chuong6 deadlock-091006115413-phpapp01
He dieu hanh
 
Bài Giảng Quản Lý Tiến Trình Trong Hệ Điều Hành
Hệ điều hành
#Week01-Chapter1 2023DE THI CSDL CAP CAO TOÀN QUÓC
Tìm hiểu về process
HDH-Chuong6 Ngăn độc quyền truy xuất olie
Introduction to os1 12 visio unicode
Ad

Recently uploaded (20)

DOCX
ôn tập thơ 4 chữ, 5 chữ ngữ văn 7 ctst sgk
PDF
bo-trac-nghiem-toan-11 dành cho cả năm học
DOCX
LUẬN VĂN GROUP ĐỀ BÀI ĐÁNH GIÁ GIAO TIẾP SƯ PHẠM
PDF
SÁNG KIẾN “MỘT SỐ KINH NGHIỆM HƯỚNG DẪN HỌC SINH THAM GIA CUỘC THI KHOA HỌC K...
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PPTX
Bài 9.4 TUYẾN SINH DỤC NAM VÀ NU CẤU TẠO VÀ CHỨC NĂNG
PDF
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 6 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
PDF
BÁO CÁO THỰC TẬP KỸ SƯ 2 ĐỀ TÀI TÌM HIỂU QUY TRÌNH CÔNG NGHỆ SẢN XUẤT BÁNH SN...
PDF
SÁNG KIẾN THIẾT KẾ MÔ HÌNH HỆ SINH THÁI HƯỚNG NGHIỆP CHO HỌC SINH THPT TRONG ...
PPT
Bai 42 Su chay thanh dong cua chat long va chat khi Dinh luat Becnuli.ppt
PPTX
CHƯƠNG I excel,,,,,,,,,,,,,,,,,,,,,,,,,,
PDF
GIẢI PHÁP NÂNG CAO CÔNG TÁC CHỦ NHIỆM QUA CÁC TIẾT SINH HOẠT THEO CHỦ ĐỀ NHẰ...
PDF
BỘ TÀI LIỆU CHINH PHỤC ĐỈNH CAO TIẾNG ANH NĂM 2026 CHUYÊN ĐỀ ÔN HỌC SINH GIỎI...
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PPTX
Bai 28 Cau tao chat Thuyet dong hoc phan tu chat khi.pptx
PDF
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 8 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
DOCX
Chủ nghĩa xã hội khoa học - Đề Cương Cuối Kỳ.docx
PDF
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
PPTX
Chương 5 của Tâm lí học - Tâm Lí Học Giáo Dục Đạo Đức
PDF
SÁNG KIẾN “NGHIÊN CỨU VÀ ĐỀ XUẤT GIẢI PHÁP TỰ RÈN LUYỆN KỸ NĂNG MỀM CHO HỌC S...
ôn tập thơ 4 chữ, 5 chữ ngữ văn 7 ctst sgk
bo-trac-nghiem-toan-11 dành cho cả năm học
LUẬN VĂN GROUP ĐỀ BÀI ĐÁNH GIÁ GIAO TIẾP SƯ PHẠM
SÁNG KIẾN “MỘT SỐ KINH NGHIỆM HƯỚNG DẪN HỌC SINH THAM GIA CUỘC THI KHOA HỌC K...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 10 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
Bài 9.4 TUYẾN SINH DỤC NAM VÀ NU CẤU TẠO VÀ CHỨC NĂNG
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 6 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
BÁO CÁO THỰC TẬP KỸ SƯ 2 ĐỀ TÀI TÌM HIỂU QUY TRÌNH CÔNG NGHỆ SẢN XUẤT BÁNH SN...
SÁNG KIẾN THIẾT KẾ MÔ HÌNH HỆ SINH THÁI HƯỚNG NGHIỆP CHO HỌC SINH THPT TRONG ...
Bai 42 Su chay thanh dong cua chat long va chat khi Dinh luat Becnuli.ppt
CHƯƠNG I excel,,,,,,,,,,,,,,,,,,,,,,,,,,
GIẢI PHÁP NÂNG CAO CÔNG TÁC CHỦ NHIỆM QUA CÁC TIẾT SINH HOẠT THEO CHỦ ĐỀ NHẰ...
BỘ TÀI LIỆU CHINH PHỤC ĐỈNH CAO TIẾNG ANH NĂM 2026 CHUYÊN ĐỀ ÔN HỌC SINH GIỎI...
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
Bai 28 Cau tao chat Thuyet dong hoc phan tu chat khi.pptx
BÀI TẬP TEST FOR UNIT TIẾNG ANH LỚP 8 GLOBAL SUCCESS CẢ NĂM THEO TỪNG ĐƠN VỊ ...
Chủ nghĩa xã hội khoa học - Đề Cương Cuối Kỳ.docx
CHUYÊN ĐỀ DẠY THÊM HÓA HỌC LỚP 11 CẢ NĂM THEO FORM THI MỚI BGD - CÓ ÔN TẬP + ...
Chương 5 của Tâm lí học - Tâm Lí Học Giáo Dục Đạo Đức
SÁNG KIẾN “NGHIÊN CỨU VÀ ĐỀ XUẤT GIẢI PHÁP TỰ RÈN LUYỆN KỸ NĂNG MỀM CHO HỌC S...
Ad

Rtos 3 semaphore vs mutex

  • 1. 3. chia sẻ tài nguyên có 1 số tài nghuyền cần chia sẻ: vùng nhớ, i/o unit (uart, spi), thanh ghi, biến, cấu trúc dữ liệu... ko cho phép truy xuất đồng thời (chỉ 1 task đc sd). kỹ thuật: semaphore. ko cho phép ngắt, chiếm quyền. mutex. 3.1 semaphore link video bài giảng của thầy 3.1.1 lý thuyết osSemaphoreNew: tạo ra 1 semaphore (có thể tạo nhiều semaphore nhưng sẽ nói sau), semaphore có thể hiểu là 1 token hoặc 1 bit , 1cờ (semaphore =1. khi task thực hiện lệnh osSemaphoreRelease thì task đó sẽ thiết lập semaphore = 1; task dùng lệnh osSemaphoreAcquire để kiểm tra semaphore có = 1 ko, nếu semaphore = 1 thì task sẽ đặt lại semaphore đó = 0 và thực hiện các câu lênh bên dưới. Nếu task kiểm tra semaphore = 0 thì task đó sẽ ở hàng đợi semaphore (trạng thái lock). khi task thực hiện các lệnh bên dưới osSemaphoreAcquire thì task vẫn có thể bị chiếm quyền như bình thường và bị đẩy vào ready hoặc bị block. yêu cầu task sử dụng tài nguyên phải thực hiện thật nhanh tránh việc lock task ưu tiên cao hơn quá lâu (dù có task có ưu tiên cao hơn mà ko có semaphorre thì vẫn bị lock) hoặc chiếm quyền task có ưu tiên thấp thấp hơn quá lâu (do có mức ưu tiên thấp hơn nên vẫn ở trạng thái ready). 1 tài nguyên có thể có nhiều semaphore-1 nhà vệ cho phép nhiều người vào cùng lúc (semaphore counting: 1 lệnh tạo nhiều semaphore hoặc nhiều lệnh semaphore binary tạo nhiều semaphore riêng rẽ), 1 semaphore cho nhiều tài nguyên (trên nguyên lý là đc nhưng ko mấy khi làm kiểu này vì nó giống nhiều phòng vệ sinh nhưng chỉ có 1 chìa khoá để khoá).
  • 2. 3.1.2 các hàm sử dụng //thuộc tính semaphore osSemaphoreId_t myBinarySem01Handle; const osSemaphoreAttr_t myBinarySem01_attributes = { .name = "myBinarySem01" };
  • 3. 3.1.3 thiết lập cubemx tạo binary semaphore (tạo 1 semaphore) 3.1.4 các chương trình ví dụ link video bài giảng của thầy 3.1.4.1 ví dụ chương trình 6 2h2500 trong video): các task cùng mức ưu tiên dùng semaphore khi lam việc chung trên uart. //khởi tạo 1 semaphore, available semaphore = 1 myBinarySem01Handle = osSemaphoreNew(1, 1, &myBinarySem01_attributes); //giải phóng semaphore có id là myBinarySem01Handle (thiết lập semaphor =1) osSemaphoreRelease(myBinarySem01Handle); //kiểm ta có semaphore ko (kiểm tra semaphore có id myBinarySem01Handle có bằng 1 ko), chờ trong khoảng thời gian osWaitForever (liên tục cho đến khi có semaphore) osSemaphoreAcquire(myBinarySem01Handle, osWaitForever);
  • 4. link project, chương trình 6 copy từ file main.c 3.1.4.2 ví dụ chương trình 7 2h:4000 high task (dùng uart cần semaphore), default task (dùng uart cần semaphore, nhận sự kiện nút nhấn), low task ko cần semaphore. link project, chương trình 7 copy từ file main.c vấn đề: default task chờ nhấn nút ko trả semaphore, đến time slice thì high task running vào yêu cầu semaphore nhưng ko có semaphore nên bị lock . default task có mức ưu tiên cao hơn low task nên chiếm hết time slice nhưng chẳng làm gì chỉ chờ nhấn nút. 3.1.4.3 chương trình 8 2h:4200 nếu đổi nhiệm vụ low task và default task thì low task chờ nhấn nút vẫn lock high task, default task mức ưu tiên cao hơn low task và ko cần semaphore nên chiếm hết time slice
  • 5. → chương trình thực tài nguyên chung cần đc thực hiện nhanh. link project, chương trình 8 copy từ file main.c 3.2 disable tất cả các ngắt, chiếm quyền taskENTER_CRITICAL; //lệnh thực thi trong phần này ko có ngắt can thiệp→ ko hay nếu task này bị treo taskEXIT_CRITICAL; ko cho phép task khác có ưu tiên cao hơn chiếm quyền của nó khi nó đang thực hiện tài nguyên quan trọng , cho nó thực hiện chọn vẹn công việc .
  • 6. 3.4 mutex link video bài giảng của thầy 3.4.1 lý thuyết nguyên lý cũng gần tương tự semaphore chỉ khác khi 1 task kiểm tra semaphore = 0 thì task đó ngoại việc bị lock thì nó sẽ kiểm tra task làm semaphore =0 (task giữa semaphore) có mức ưu tiên thấp hơn task bị lock thì task giữ semaphore sẽ đc setup lên cùng mức ưu tiên với task đang bị lock. giúp task đang giữ semaphore thực hiện nhanh hơn (ít bị task khác chiếm quyền hơn), task bị lock nhanh đc giải phóng hơn. khi chia sẻ tài nguyền dùng chung thì 1 task có thể kế thừa các mức ưu tiên khác nhau
  • 7. deadlock: các tài nguyên khoá lẫn nhau, j2 cần a j1 cần b kế thừa mức ưu tiên bắc cầu: j3 kế thừa mức ưu tiên của j1 thông qua j2.
  • 8. 3.4.2 các hàm thư viện sử dụng các lệnh sử dụng tương tự semaphore chỉ cần thay thế semaphore→ mutex. 3.4.3 thiết lập cubemx trong phần cubemx thêm mutexes
  • 9. 3.4.4 các chương trình ví dụ link video bài giảng của thầy 3.4.4.1 chương trình 9 tương tự chương trình 8 nhưng thay semaphore bằng mutex link project, chương trình 8 copy từ file main.c