Thứ Năm, 4 tháng 1, 2018

[Vụn vặt Linux] System Call

System Calls hay còn được gọi là syscall, là những lời gọi hàm từ user space tới kernel space để yêu cầu kernel thực hiện một công việc nào nó (như giao tiếp với ngoại vi, đọc ghi file v.v). Có rất nhiều System Calls nó thể kể đến một vào syscall cơ bản như:
- read()
- write()
hay một số syscall rất ít gặp như:
- get_thread_area()
- set_tid_address()
Danh sách đầy đủ hơn có thể tìm ở đây: http://asm.sourceforge.net/syscall.html
Vậy chung quy lại: System Calls (lời gọi hệ thống) là một việc chúng ta gọi một hàm mà kernel cung cấp (glibc) từ user-space để yêu cầu kernel thực hiện một nhiệm vụ nhất định.

Tại sao chúng ta cần System Calls?
Trong kiến trúc của Linux kernel, user-space không thể gọi trực tiếp các tác vụ bên dưới kernel (các hàm dưới kernel) để đảm bảo tính bảo mật và độ tin cậy (vì kernel làm việc trực tiếp với hardware).
Do đó, system calls được sinh ra để thực hiện việc làm cầu nối giữa kernel và user.

Cơ chế hoạt động của System Calls:
User-space thông báo cho Kernel space phải thực hiện tác vụ nào thông qua machine registers (thanh ghi máy). Như danh sách system calls mình đưa ở trên, số 5 chính là sys_open (tương ứng với hàm open trên user-space). Khi trên user-space gọi hàm open(), con số đại diện cho system call sys_open() là 5 sẽ được điền vào thanh ghi EAX, sau đó thực hiện softwa interrupt instruction (lệnh ngắt phần mềm) int 0x80. "Mình sẽ giới thiệu về SII trong bài viết sau đó".

Cám ơn và chúc tốt lành.

Không có nhận xét nào:

Đăng nhận xét