Context trong Linux
TIL
763
Linux
111
embedded
16
White

Khó viết ngày 08/10/2018

Context trong Linux

Process context, interrupt context, user(space) context, system call context, atomic context, nonatomic context,... là những khái niệm về context hay gặp khi làm việc với Linux kernel. Chắc hẳn nhiều bạn cũng giống như mình, ban đầu sẽ rất bối rối khi gặp những khái niệm này. Tại sao lại có nhiều loại context như này? Có cái nào giống cái nào không? Hôm nay mình sẽ đi tổng hợp những kiến thức liên quan đến các loại ngữ cảnh trong linux kernel:

1. Process context:

Một trong những nhiệm vụ chính của process là thực thi lệnh chương trình. Những lệnh này được đọc từ một file thực thi (executable file) là thực thi cùng với không gian địa chỉ của chương trình. Một chương trình thông thường như thế xảy ra ở user-space. Khi một chương trình thực hiện gọi tới system call, nó nhảy vào kernel-space. Ở thời điểm này, kernel thay mặt cho process thực thi chương trình, và ngữ cảnh tại đây gọi là process context. (Như vậy process contextđồng nghĩa vớisystem call context). Ngoài ra "User contexts are code which is entered from userspace: a system call", vậy nên user context cũng đồng nghĩa nốt. :)))
process context, kernel có thể ngủ (lấy ví dụ khi một system call blocks khi gọi schedule()), và cũng hoàn toàn preemtible. Nhắc lại thì preemtible là có thể xảy ra chen hàng, chen hàng là hiện tượng một process A đang chạy thì bị ngắt, sau khi thực hiện ngắt xong thì process B lại được thực hiện thay vì process A.

2. Interrupt context:

Khi thực thi một trình phục vụ ngắt (interrupt handler), đơn giản là kernel đang ở trong interrupt context. Trái ngược với process context, interrupt context không liên kết gì với một process, vô hiệu hóa bộ lập lịch, và nó tồn tại một cách độc lập với process context với mục đích giúp trình phục vụ ngắt phản hồi thật nhanh một ngắt và exit. Loại ngữ cảnh đặc biệt này thỉnh thoảng còn được gọi là atomic context, vì code thực thi ở ngữ cảnh này không được phép block (hay ngủ). (Nonatomic context thì ngược lại, như vậy có vẻ nonatomic ám chỉ process context). Interrupt context không thể ngủ, do đó không thể sử dụng một số hàm ở đây ( ví dụ như sleep function). Interrupt context vô cùng khắt khe về mặt thời gian (time-critical) vì trình phục vụ ngắt đã ngắt một chương trình khác, vậy nên trình phục vụ phải nhanh và đơn giản.
alt text
Túm cái váy lại, theo mình chỉ có 2 loại context chính:

  • Process context = user context = system call context = nonatomic context.
  • Interrupt context = atomic context.

Mình vẫn gà mờ lắm nên rất mong muốn những góp ý, sửa đổi bổ sung từ các bạn. Thankss!!
BeanRedArmy 27-09-2018

P/s: (29-09-2018) Hôm nay nghiền ngẫm kĩ mình cho rằng atomic context có nghĩa rộng hơn là interrupt context. Tức là atomic context xảy ra khi code ở ngữ cảnh này không được phép ngủ, những công việc nào không được phép ngủ thì sẽ ở atomic context. Ví dụ như ta delay bằng busy-wait cũng là ở trong atomic context. Ở interrupt context thì cũng không được ngủ nên nó là một loại của atomic context.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Khó

12 bài viết.
35 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
8 2
Device Tree trong Linux Device Tree (DT) là một file mô tả phần cứng, có kiểu định dạng giống JSON, nó mô tả một cấu trúc cây, ở đó thì các device...
Khó viết gần 2 năm trước
8 2
White
5 1
Những công cụ và hàm hay dùng trong Linux Device Driver (Phần 1) _Tham khảo từ Linux Device Drivers Development_ Bản thân kernel là một phần tác...
Khó viết 2 năm trước
5 1
White
4 0
Reentrant và Threadsafe Một chương trình máy tính, một hàm A hoặc một chương trình con được gọi là reentrant nếu nó có thể bị ngắt lúc đang thực t...
Khó viết gần 2 năm trước
4 0
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết hơn 2 năm trước
0 4
White
4 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết hơn 1 năm trước
4 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
12 bài viết.
35 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!