Có thể xem system call (hay syscall) là một interface giúp liên kết một tiến trình (process) với hệ điều hành. Cụ thể hơn, nó là cách mà một tiến trình có thể yêu cầu các chức năng từ kernel của hệ điều hành.
- System call cung cấp các chức năng của hệ điều hành thông qua API.
- System call là cách duy nhất để tương tác với kernel của hệ thống.
Ví dụ, nếu ta cần viết một chương trình để sao chép dữ liệu từ file input.txt
sang file output.txt
thì ta cần một số system calls sau đây:
- Một system call để xuất câu lệnh yêu cầu nhập tên file ra màn hình.
- Một system call để đọc các ký tự nhập từ bàn phím, là tên của hai file cần thao tác.
How System Call Works?
Các bước thực thi một system call:
- Chương trình cấp độ người dùng thực thi trong user mode.
- Gọi thực hiện “system call”. Lúc này, tiến trình sẽ bị ngắt và CPU sẽ chuyển từ user mode sang kernel mode.
- Kernel xác minh các đối số cho system call và thực thi các tác vụ của system call.
- Kernel trả về các kết quả hoặc mã lỗi. CPU chuyển lại cho user mode, tiến trình tiếp tục được thực thi.
Why Do We Need System Call in OS?
Các nhu cầu sau đây sẽ cần phải sử dụng đến system call:
- Đọc và ghi tập tin.
- Khi hệ thống tập tin cần tạo hoặc xóa file.
- Tạo và quản lý các tiến trình mới.
- Gửi và nhận các gói tin mạng.
- Truy cập đến các thiết bị chẳng hạn như scanner hoặc máy in.
Important System Calls Used in OS
Wait
Sử dụng khi một tiến trình cần chờ một tiến trình khác thực thi.
Trường hợp này xảy ra khi tiến trình cha tạo ra một tiến trình con và cần phải tạm hoãn trong khi tiến trình con đang được thực thi. Để khiến cho tiến trình cha chờ tiến trình con, system call wait
sẽ tự động được gọi. Khi tiến trình con được thực thi xong, tiến trình cha sẽ tiếp tục được thực thi.
Fork
Các tiến trình sử dụng syscall này để tạo ra một bản sao của chính nó.
Exec
System call này sẽ thay thế tiến trình đang chạy bằng một tiến trình mới nhưng vẫn giữ nguyên pid của tiến trình cũ. Các tài nguyên của tiến trình chẳng hạn như bộ nhớ, code, dữ liệu và stack đều sẽ bị thay đổi.
Kill
Sử dụng bởi hệ điều hành để gửi một tín hiệu kết thúc tiến trình nhằm hối thúc tiến trình nhanh chóng thoát ra.
Exit
Ngắt hoàn toàn tiến trình. Trong môi trường đa luồng, system call này là dấu hiệu cho việc kết thúc thực thi của một luồng nào đó. Hệ điều hành sẽ thu hồi các tài nguyên của tiến trình sau khi sử dụng system call exit
.
Bảng tổng hợp các loại syscall ở Windows và Linux:
Categories | Windows | Unix |
---|---|---|
Process control | CreateProcess, ExitProcess, WaitForSingleObject | fork, exit, wait |
Device manipulation | SetConsoleMode, ReadConsole, WriteConsole | loctl, read, write |
File manipulation | CreateFile, ReadFile, WriteFile, CloseHandle | Open, Read, write, close |
Information maintanence | GetCurrentProcessID, SetTimer, Sleep | getpid, alarm, sleep |
Communication | CreatePipe, CreateFileMapping, MapViewOfFile | Pipe, shm_open, mmap |
Protection | SetFileSecurity, InitlializeSecurityDescriptor, SetSecurityDescriptorGroup | Chmod, Umask, Chown |