system calls

21
The interface between (Giao diện | Giao diện Là thiết bị hoặc phần mềm kết nối hai phần tử tách rời nhau.| giữa…) the operating system ( Hệ điều hành) and the user programs( Chương trình của người dùng) is defined by ( được xác định bởi) the set of system calls (Tập hợp/ bộ các lời gọi hệ thống( systen calls) ) that the operating system provides ( mà Hệ điều hành cung cấp). To really understand what operating systems do ( Để thực sự hiểu được cách thức hệ điều hành làm việc), we must examine this interface closely( chúng ta phải kiểm tra giao diện này thật kĩ.) .The system calls available in ( Các lời gọi hệ thống có giá trị trong ) the interface vary ( việc thay đổi giao diện) from operating system to operating system ( từ hệ điều hành này sang hệ điều hành khác) (although the underlying concepts tend to be similar-- Mặc dù các khái niệm cơ bản khuynh hướng là giống nhau/tương tự nhau).We are thus forced to make a choice between Chúng ta buộc

Upload: gio-buon

Post on 08-Nov-2014

56 views

Category:

Documents


0 download

DESCRIPTION

he dieu hanh

TRANSCRIPT

Page 1: System Calls

The interface between (Giao diện | Giao diện

Là thiết bị hoặc phần mềm kết nối hai phần tử tách rời nhau.| giữa…) the operating system ( Hệ điều hành) and the user programs( Chương trình của người dùng) is defined by ( được xác định bởi) the set of system calls (Tập hợp/ bộ các lời gọi hệ thống( systen calls) ) that the operating system provides ( mà Hệ điều hành cung cấp). To really understand what operating systems do ( Để thực sự hiểu được cách thức hệ điều hành làm việc), we must examine this interface closely( chúng ta phải kiểm tra giao diện này thật kĩ.) .The system calls available in ( Các lời gọi hệ thống có giá trị trong ) the interface vary ( việc thay đổi giao diện) from operating system to operating system ( từ hệ điều hành này sang hệ điều hành khác) (although the underlying concepts tend to be similar-- Mặc dù các khái niệm cơ bản khuynh hướng là giống nhau/tương tự nhau).We are thus forced to make a choice between Chúng ta buộc phải lựa chọn giữa (1) vague generalities( sự mơ hồ chung chung) (“operating systems have system calls for reading files” hệ điều hành có các lời gọi hệ thống để đọc các tệp tin) and và (2) some specific system một số hệ điều hành tiêu biểu/đặc biệt (“UNIX has a read system call with three parameters Hệ điều hành UNIX có một lời gọi hệ thống đọc với 3 thông số: one to specify the file một thông số cho biết đăc tính file, one to tell where the data are to be put một thông số cho biết nơi dữ liệu được đặt, and one to tell how many bytes to read một thông số cho biết kích thước file được đọc ”).

Page 2: System Calls

We have chosen the latter approach Chúng ta đã chọn cách tiếp cận thứ 2. It’s more work that way điều đó làm nhiều việc hơn , but it gives more insight into what operating systems really do nhưng nó cho ta cái nhìn sâu hơn về câu hỏi “Hê điều hành thực sự làm những gì?”. Although this discussion specifically refers to POSIX Mặc dù cuộc thảo luận này đặc biệt đề cập tới POSIX (Portable Operating System Interface, bao gồm những định nghĩa “giao diện” chung cho các hệ điều hành) (International Standard 9945-1 Với chuẩn quốc tế 9945-1), hence also to kể từ đó cho tới UNIX, System V, BSD, Linux, MINIX, etc., các HĐH UNIX, System V, BSD, Linux, MINIX, vv.., most other modern operating systems have system calls hầu hết các mô hình hđh khác có lời gọi hệ thống that perform the same functions thực hiện các chức năng tương tự nhau, even if the details differ cho dù có các chi tiết khác nhau. Since the actual mechanics of issuing a system call Kể từ khi cơ chế thực tế của việc ban hành một lời gọi hệ thống are highly machine dependent là sự phụ thuộc vào máy cấu hình cao and often must be expressed in assembly code và thường phải được biểu diễn ở dạng mã máy “assembly”, a procedure library một thư viện các thủ tục is provided được cung cấp to make it possible để nó có thể to make system calls làm lời gọi hệ thống from C programs and often from other languages as well từ các ngôn ngữ lập trình C và thường từ các ngôn ngữ khác nữa.

It is useful to keep the following in mind Nó còn hữu ích cho việc giữ lại các í nghĩ sau này. Any single-CPU computer Bất kỳ máy tính CPU-đơn can execute only one

Page 3: System Calls

instruction at a time đều chỉ có thể thực hiện được một câu lệnh tại một thời điểm. If a process is running a user program Nếu có một tín trình đang chạy một chương trình người sử dụng in user mode ở chế độ người dùng and needs a system service và cần một dịch vụ hệ thống, such as reading data from a file chẳng hạn như đọc dữ liệu từ một tập tin, it has to execute a trap nó phải thực hiện một cái bẫy “trap”or system call instruction hoặc thực hiện một câu lệnh lời gọi hệ thống to transfer control to the operating system để truyền điều khiển tới hệ điều hành. The operating system then figures out what the calling process wants by inspecting the parameters .Hệ điều hành sau đó đưa ra các con số cho những gì tiến trình gọi muốn bằng cách kiểm tra các thông số.Then it carries out the system call and returns control to the instruction following the system call Sau đó nó thực hiện lời gọi hệ thống và trả về điều khiển câu lệnh theo sau lời gọi hệ thống. In a sense Với ý nghĩa, making a system call is like making a special kind of procedure call việc thực hiện một lời gọi hệ thống nó giống như việc thực hiện một trường hợp đặc biệt của lời gọi thủ tục, only system calls enter the kernel chỉ có lời gọi hệ thống được đưa vào nhân and procedure calls do not còn lời gọi thủ tục thì không.

To make the system call mechanism clearer Để làm “cơ chế lời gọi hệ thống” được sáng tỏa, let us take a quick look at the read system call chúng ta hãy đưa ra một cái nhìn nhanh ở việc “đọc lời gọi hệ thống”. As mentioned above như đề cập trước đó, it has three parameters nó có 3 thông số: the first one specifying the file thứ nhất là đặc tính tệp tin, the second one pointing to the buffer thứ 2 là điểm tới bộ đệm,

Page 4: System Calls

and the third one giving the number of bytes to read và thứ 3 là cho biết kích thước tệp tin được đọc. Like nearly all system calls Cũng giống như tất cả lời gọi hệ thống, it is invoked from C programs nó được đưa ra từ ngôn ngữ lập trình C by calling a library procedure with the same name as the system call bằng việc gọi một thư viện thủ tục với cái tên giống như lời gọi hệ thống là : read. A call from a C program might look like this: Một lời gọi với ngôn ngữ C có thể trông như thế này:

count = read(fd, buffer, nbytes); //đọc dữ liệu từ tệp tin ra bộ đệm

The system call (and the library procedure) Lời gọi hệ thống( và thư viện thủ tục)return the number of bytes actually read in count. trả lại số Bytes đã thực sự đọc trong count. This value is normally the same as nbytes, Giá trị này thường ở dạng nbytes but may be smaller, if, for example, end-of-file is encountered while reading. nhưng có thể nhỏ hơn khi “if, for example, end-of-file” được bắt gặp trong khi đọc.

If the system call cannot be carried out,Nếu lời gọi hệ thống không được thực hiện either due to an invalid parameter or a disk error hoặc là do một tham số không hợp lệ hoặc lỗi đĩa, count is set to -1 count được định giá trị là -1, and the error number is put in a global variable, errno và số lỗi được đưa vào một biến toàn cục, errno. Programs should always check the results of a system call to see if an error occurred. Chương trình sẽ luôn kiểm tra kết quả của một lời gọi hệ thống để xem nếu có một lỗi xuất hiện.

Page 5: System Calls

System calls are performed in a series of steps. Lời gọi hệ thống là được thực hiện trong một loạt các bước. To make this concept clearer để làm sáng tỏ điểm này, let us examine the read call discussed above chúng ta hãy kiểm tra lại việc đọc lời gọi ở thảo luận trước . In preparation for calling the read library procedure Để chuẩn bị cho gọi “read ”của thư viện thủ tục, which actually makes the read system call việc này thực sự cần đọc lời gọi hệ thống, the calling program first pushes the parameters onto the stack chương trình lời gọi đầu tiên đẩy các thông số vào ngăn xếp stack, as shown in steps 1-3 in Fig. 1-17. C xem bước 1 tới bước 3 ở hình 1-17 and C++ compilers push the parameters onto the stack in reverse order for historical reasons và trình biên dịch C + + đẩy các thông số vào stack theo thứ tự ngược vì những lý do lịch sử(having to do with making the first parameter to printf, the format string, appear on top of the stack) (phải làm cùng với việc tham số đầu tiên được printf, chuỗi định dạng, xuất hiện trên đỉnh của ngăn xếp). The first and third parameters are called by value Các thông số đầu tiên và thứ ba được gọi bởi giá trị, but the second parameter is passed by reference nhưng tham số thứ hai là thông qua tra cứu, meaning that the address of the buffer (indicated by &) is passed nghĩa là địa chỉ bộ đệm( được chỉ định bởi &) được thông qua, not the contents of the buffer không phải là nội dung của bộ đệm. Then comes the actual call to the library procedure (step 4) Sau đó là đến lời gọi thực tế tới thư viện thủ tục (bước 4). This instruction is the normal procedure call instruction used to call all procedures. Lệnh này là lời gọi thủ tục thông thường, nó được sử dụng gọi tất cả các thủ tục

Page 6: System Calls

The library procedure, possibly written in assembly language Các thư viện thủ tục, có thể được viết bằng ngôn ngữ máy “assembly”, typically puts the system call number in a place where the operating system expects it, such as a register (step 5)thường đặt số lượng lời gọi hệ thống trong một nơi mà hệ điều hành dự kiến, chẳng hạn như một thanh ghi (bước 5). Then it executes a TRAP instruction to switch from user mode to kernel mode and start execution at a fixed address within the kernel (step 6) Sau đó, nó thực hiện một lệnh TRAP để chuyển đổi từ chế độ người dùng sang chế độ hạt nhân “kernel” và bắt đầu thực hiện tại một địa chỉ cố định bên trong hạt nhân (bước 6). The kernel code that starts examines the system call number and then dispatches to the correct system call handler, usually via a table of pointers to system call handlers indexed on system call number (step 7).Mã hạt nhân bắt đầu kiểm tra số lượng lời gọi hệ thống và sau đó gửi đi cho trình xử lý chính xác lời gọi hệ thống, thường là thông qua một bảng các con trỏ để trình xử lý lời gọi hệ thống lập chỉ mục trên số lượng lời gọi hệ thống (bước 7). At that point the system call handler runs (step 8) Vào thời điểm đó trình xử lý lời gọi hệ thống chạy (bước 8). Once the system call handler has completed its work, control may be returned to the user-space library procedure at the instruction following the TRAP instruction (step 9) Một khi trình xử lý lời gọi hệ thống đã hoàn thành công việc của mình, điều khiển có thể được trả lại cho thư viện thủ tục không gian sử dụng ở lệnh theo sau lệnh TRAP (bước 9). This procedure then returns to the user program in the usual way procedure calls return (step 10).Thủ tục này sau đó trả lại cho chương trình người dùng theo cách thông thường các lời gọi thủ tục quay lại (bước 10).

Page 7: System Calls

Figure 1-17. The 11 steps in making the system call read(id, buffer, nbytes). 11 bước trong thực hiện lời gọi hệ thống read(id, buffer, nbytes).

To finish the job, the user program has to clean up the stack, as it does after any procedure call (step 11). Để hoàn thành công việc, chương trình người dùng phải làm sạch ngăn xếp, như nó làm sau bất kỳ lời gọi thủ tục nào (bước 11).Assuming the stack grows downward, as it often does, the compiled code increments the stack pointer exactly enough to remove the parameters pushed before the call to

Page 8: System Calls

read. Giả sử stack theo chiều đi xuống, như thường lệ, mã biên dịch tăng con trỏ ngăn xếp đủ chính xác để loại bỏ các thông số được đẩy vào trước lời gọi read .The program is now free to do whatever it wants to do next. Chương trình bây giờ được tự do để làm bất kì điều gì nó muốn làm tiếp theo.

In step 9 above, we said “may be returned to the user-space library procedure ...” for good reason Trong bước 9 ở trên, chúng ta đã nói "có thể được trả lại cho không gian sử dụng thư viện thủ tục ..." cho lý do chính đáng. The system call may block the caller, preventing it from continuing. For example, if it is trying to read from the keyboard and nothing has been typed yet, the caller has to be blocked Các lời gọi hệ thống có thể chặn lời gọi, ngăn không cho lời gọi tiếp tục. Ví dụ, nếu nó đang cố gắng để đọc từ bàn phím và không có gì đã được đánh máy, lời gọi có thể bị chặn. In this case, the operating system will took around to see if some other process can be run next. Later, when the desired input is available, this process will get the attention of the system and steps 9-11 will occur. Trong trường hợp này, hệ điều hành sẽ chiếm giữ xung quanh để xem nếu một tiến trình khác có thể chạy tiếp. Sau đó, khi đầu vào mong muốn là có sẵn, tiến trình này sẽ nhận được sự chú ý của hệ thống và các bước 9-11 sẽ xảy ra.

In the following sections, we will examine some of the most heavily used POSIX system calls, or more specifically, the library procedures that make those system calls Trong các phần sau, chúng ta sẽ xem xét một số các lời gọi hệ thống POSIX sử dụng nhiều nhất, hoặc đặc biệt

Page 9: System Calls

hơn, các thư viện thủ tục mà làm cho những lời gọi hệ thống này . POSIX has about 100 procedure calls POSIX có khoảng 100 lời gọi thủ tục. Some of the most important ones are listed in Fig. 1-18, grouped for convenience in four categories Một số trong những lời gọi thủ tục quan trọng nhất được liệt kê trong hình. 1-18, được nhóm lại cho thuận tiện trong bốn loại. In the text we will briefly examine each call to see what it does Trong văn bản, chúng tôi sẽ xem xét ngắn gọn mỗi cuộc gọi để xem những gì nó làm. To a large extent, the services offered by these calls determine most of what the operating system has to do, since the resource management on personal computers is minimal (at least compared to big machines with multiple users) Đến một phạm vi lớn, các dịch vụ được cung cấp bởi các lời gọi xác định hầu hết các hệ điều hành phải làm gì, từ việc quản lý nguồn tài nguyên trên máy tính cá nhân là tối thiểu (ít nhất là so với máy lớn với nhiều người dùng). The services include things like creating and terminating processes, creating, deleting, reading, and writing files, managing directories, and performing input and output Các dịch vụ này bao gồm như: việc tạo và hủy bỏ tiến trình, tạo, xóa, đọc và viết các tập tin, quản lý thư mục, và thực hiện đầu vào và đầu ra.

Process management Quản lý tiến trình

Call lời gọi Description mô tả

pid = fork()Create a child process identical to the parent Tạo một tiến trình con giống hệt cha mẹ

Page 10: System Calls

pid = waitpid(pid, &statloc, options)

Wait for a child to terminate đợi tiến trình con được chấm dứt

s = execve(name, argv, environp)

Replace a process’ core image Thay thế hình tượng cốt lõi của một tiến trình

exit(status)Terminate process execution and return status Chấm dứt thực hiện tiến trình và quay lại trạng thái đầu

File management Quản lý tệp tin

Call Description

fd = open (file, how,...)Open a file for reading, writing or both Mở một tệp tin để đọc, viết hoặc cả hai

s = close(fd)Close an open file Đóng một tệp tin đã mở

n = read(fd, buffer, nbytes)Read data from a file into a buffer Đọc dữ liệu từ một bộ đệm

n = write(fd, buffer, nbytes)Write data from a buffer into a file Viết dữ liệu từ một bộ đệm vào một tệp tin

position = lseek(fd, offset, whence)

Move the file pointer Di chuyển con trỏ tệp tin

s = stat(name, &buf)Get a file’s status information Lấy thông tin trạng thái của một tệp tin

Directory and file system management Quản lý hệ thống tệp tin và thư mục

Page 11: System Calls

Call Description

s = mkdir(name, mode)Create a new directory Tạo một thư mục mới

s = rmdir(name)Remove an empty directory Gỡ bỏ một thư mục trống

s = link(name1, name2)Create a new entry, name2, pointing to name1 Tạo một entry mới name2 trỏ tới name1

s = unlink(name)Remove a directory entry Gỡ bỏ một entry thư mục

s = mount(special, name, flag)Mount a file system Gắn kết một tập tin hệ thống

s = umount(special)Unmount a file system Gỡ gắn kết một tập tin hệ thống

Miscellaneous Tổng hợp

Call Description

s = chdir(dirname)Change the working directory Thay đổi thư mục đang làm việc

s = chmod(name, mode)Change a file’s protection bits Thay đổi một bít bảo vệ của tệp tin

s = kill(pid, signal)Send a signal to a process gửi một tín hiệu tới một tiến trình

seconds = time(&seconds)Get the elapsed time since Jan. 1, 1970 Lấy thời gian đã trôi qua kể từ 1 tháng Giêng, 1970

Figure 1-18. Some of the major POSIX system calls Một số lời gọi hệ thống trọng yếu. The return code s is −1 if an

Page 12: System Calls

error has occurred mã trả lại $ là -1 nếu một lỗi đã xảy ra.. The return codes are as follows: pid is a process id, fd is a file descriptor, n is a byte count, position is an offset within the file, and seconds is the elapsed time Các mã trả lại như sau: pid là một tiến trình id, fd là một mô tả tập tin, n là một byte số, position là một khoảng trống trong tập tin, và seconds là thời gian đã trôi qua. The parameters are explained in the text.Các thông số được giải thích trong văn bản

As an aside, it is worth pointing out that the mapping of POSIX procedure calls onto system calls is not one-to-one Như một khía cạnh khác, nó có giá trị chỉ ra rằng việc sắp sếp của thủ tục POSIX gọi tới lời gọi hệ thống không phải là một tới một

The POSIX standard specifies a number of procedures that a conformant system must supply, but it does not specify whether they are system calls, library calls, or something else Tiêu chuẩn POSIX xác định một số thủ tục mà một hệ thống hợp chuẩn/tương thích phải cung cấp, nhưng nó không định rõ, cho dù đó là lời gọi hệ thống, lời gọi thư viện, hay cái gì khác. If a procedure can be carried out without invoking a system call (i.e., without trapping to the kernel), it will usually be done in user space for reasons of performance Nếu một thủ tục có thể được thực hiện mà không cần gọi một lời gọi hệ thống (tức là, không có bẫy tới hạt nhân), nó thường sẽ được thực hiện trong không gian người sử dụng vì lý do hiệu suất. However, most of the POSIX procedures do invoke system calls, usually with one procedure mapping directly onto one system call. In a

Page 13: System Calls

few cases, especially where several required procedures are only minor variations of one another, one system call handles more than one library call.Tuy nhiên, hầu hết các thủ tục POSIX gọi lời gọi hệ thống, thường là với một thủ tục lập sắp đặt trực tiếp vào một lời gọi hệ thống.Trong một vài trường hợp, đặc biệt là một số thủ tục cần thiết chỉ là các thay đổi nhỏ của một người khác, một lời gọi hệ thống xử lý nhiều một lời gọi thư viện.