Đồ ộ
■ M t yêu c u cho vi c th c thi ch ộ ầ ệ ự ế độ nhân có th x y ra theo hai ể ả
cách:
● Khi m t chộ ương trình ang ch y có th yêu c u m t d ch v đ ạ ể ầ ộ ị ụ
c a h i u hành, ho c rõ ràng h n thì qua system call. Ví d : ủ ệ đ ề ặ ơ ụ
khi l i trang x y ra.ỗ ả
● M t trình i u khi n có th chuy n các ng t, các ng t này làm ộ đ ề ể ể ể ắ ắ
cho CPU b t ắ đầu th c thi t ng ng tự ừ ắ
■ Đồng b nhân yêu c u các framework ộ ầ để cho phép các vùng tranh
21.28
ng b hóa Kernel
Đồng b hóa Kernelộ
Đồ ộ
■ Linux dùng 2 k thu t ỹ ậ để ả b o v vùng tranh ch p:ệ ấ
1. Mã kernel bình thường thì nonpreemptible (until 2.4)
– khi có m t ng t x y ra trong khi chộ ắ ả ương trình ang th c thi đ ự
m t tác v c a h th ng nhân, c ộ ụ ủ ệ ố ờ need_resched c a kernel ủ
c b t lên b nh th i s ch y system call n khi hoàn
đượ ậ để ộ đị ờ ẽ ạ đế
thành và i u khi n tr v ch đ ề ể ả ề ế độ ngườ ử ụi s d ng
2. K thu t th hai là vùng tranh ch p x y ra trong service routineỹ ậ ứ ấ ả
– b ng cách dùng ng t vi x lý ằ ắ ử để đ ề i u khi n không cho ng t ể ắ
x y ra trong vùng tranh ch p, kernel ả ấ đảm b o r ng nó có th ả ằ ể
x lý mà không có m t l i nào do các c u trúc d li u chia x ử ộ ỗ ấ ữ ệ ẻ
21.29
ng b hóa Kernel
Đồng b hóa Kernelộ
Đồ ộ
■ Để tránh nh ng b t l i hi u su t , các nhân Linux dùng nh ng c u ữ ấ ợ ệ ấ ữ ấ
trúc đồng b , ộ để cho phép nh ng vùng tranh ch p dài ch y mà ữ ấ ạ
không vô hi u các ng t cho ệ ắ độ dài c a t t c các vùng tranh ch pủ ấ ả ấ
■ Interrupt service routines được chia thành a top half and a bottom half.
● Top half là interrupt service routine bình thường và ch y mà ạ
không cho phép ng t l p l iắ ặ ạ
● Bottom half ch y cho phép t t c các ng t, b ng m t b d nh ạ ấ ả ắ ằ ộ ộ ị
th i nh ờ ỏ để ch c r ng các bottom half không bao gi ng t ắ ằ ờ ắ
chính nó
● Ki n trúc này ế được hoàn thành b i m t c ch ở ộ ơ ế để vô hi u hoá ệ
l a ch n các bottom half trong khi ang th c thi bình thự ọ đ ự ường, mã nhân foreground
21.30