The linux programming interface Part 1

Mở đầu

Chủ đề

Trong cuốn sách này, tôi sẽ mô tả về Liux programming interface - the system calls, library function và các lơ level interface được cung cấp bởi Linux, và các bản phân phối miễn phí của hệ điều hành UNIX. Các interface này được được sử dụng, trực tiếp hoặc gián tiếp bởi các chương trình chạy trên linux. Chúng cho phép ứng dụng perform các tác vụ như đọc ghi file, tạo xóa file và thư mục, tạo process mới, thực thi các chương trình, thực thi các chương trình, cài đặt thời gian, giao tiếp giữa các tiến trình và threads trong cùng máy tính, và giao tiếp giữa các tiến trình và các máy tính khác nhau kết nối qua mạng.

  • Tập các lơ level interface thỉnh thoảng biết đến là system programming interface

1 Lịch sử và chuẩn

  • Linux là họ nhà UNIX. Trong thuật ngữ máy tính, UNIX có một lịch sử lâu dài.
  • Một trang các đặc trưng nổi bật của UNIX system là không được điều khiển bởi bất kỳ một tổ chức hay nhà cung cấp đơn lẻ nào => có nhiều tính năng sáng tạo được thêm vào UNIX, nhưng cũng có những kết quả tiêu cực qua các bản phân phối qua thời gian, viết chương trình chạy được trên tất cả các hệ điều hành UNIX ngày một khó.

    1.1. Lược sử về UNIX và C

  • Đầu tiêu UNIX được phát triển năm 1969 bởi Ken Thompson và Bell Laboratories (cùng năm Linux Torvalds sinh ra). Thompson đã vẽ ra một vài ý tưởng về hệ điều hành của ông từ MULTICS, bao gồm cấu trúc cây thư mục, một chương trình tách biệt cho việc thông dịch lệnh (the shell), và khái niệm tập tin như là một unstructured streams of bytes.
  • Năm 1970 UNIX được viết lại bởi hợp ngữ.
  • Một thời gian ngắn sau, Dennis Ritchie, một đồng nghiệp của Thompson đã thiết kế và cài đặt ngôn ngữ lập trình C, đây là một bước tiến lớn
  • Nguồn gốc của C giải thích vì sao mà nó được sử dụng rộng rãi như là ngôn ngữ lập trình hệ thống cho ngày hôm nay. Trước khi được sử dụng rộng rãi và được thiết kê đa mục đích. FORTRAN như là để performs các tác vụ bởi các kĩ sử và các nhà khoa học. COBOL cho các hệ thống thương mại. C không giống như FORTRAN và COBOL các mà được thiết kế bởi rất nhiều ủy ban, thiết kế của C nảy sinh từ ý tưởng và với một vài cá nhân làm việc với cùng một mục đích: Phát triển một ngôn ngữ bậc cao cho việc implementing UNIX kernel và giao tiếp phần mềm. Như chính hệ điều hành UNIX, C được thiết kế bởi các chuyên gia phần mềm cho mục đích sử dụng của họ. Ngôn ngữ nhỏ gọn, hiệu quả, mạnh mẽ, ngắn gọc, hướng mudule, thực dụng và mạch lạc trong thiết kế.

    YNIX first through Sixth editions

    Giữa năm 69-70, UNIX đã có một vài release, được biết như là editions.

    Sự ra đời của BSD và System V

    Tháng 1/1970 UNIX phiên bản thứ 7 ra đời, cải thiện rất nhiều tính năng của hệ thống và cung cấp một file system được nâng cấp. Bản release này bao gồm một vài công cụ mới như awk, make, sed, tar, uucp, the Bourne shell, và FORTRAN 77 compiler. UNIX 7 rất ý nghĩa chia thành 2 phần chính BSD và System V, được mô tả ngắn gọn như sau.
    Thompson năm 1975/1976 làm việc với một vài sinh viên ở University of California tại Berkeley thêm một vài tính năng cho UNIX (Một trong số học sinh này là Bill Joy, sau đó đã trở thành cofound SUN Microsystems, ) Qua thời gian rất nhiều công cụ mới và tính năng được phát triển ở Berkeley bao gồm C shell , vi editor, một improved file system (Berkeley Fast File System), sendmail, Pascal compiler, và virtual memory management.
    Dưới cá tên Berkeley Software Distribution (BSD), phiên bản UNIX này bao gồm mã nguồn và được phân phối rộng rãi. full distribution là 3BSD 12/1979.

Năm 1983, Computer Systems Research Group tại University of California tại Berkeley released 4.2BSD. Bản release này rất có ý nghĩa bởi vì nó bao gồm bản cài đặt hoàn toàn của TCP/IP. bao gồm sockets application programming và một vài networking tool. 4.2BSD và người tiền nhiệm của nó 4.1BSD trở nên rộng rãi khắp các trường đại học trên toàn thế giới. Chúng hình thànnh nền tảng cho SunOS (released năm 1983), UNIX được bán bởi Sun(4.3BSD), 1986 bản cuối cùng 4.4BSD năm 1993.

1.2. Lược sử Linux

Thuật ngữ Linux được sử dụng rộng rãi với toàn bộ UNIX-like. Tuy nhiên, điều này vài thứ được hiểu sai, rất nhiều thành phần chính …

1.3. Tiêu chuẩn

Fundamental Concepts

2.1. The core Operating System: The Kernel

thuật ngữ hệ điều hành được sử dụng rộng rãi với 2 nghĩa.

  • Phần mềm trung tâm một computer resources như commandline interpreters, graphical user interface,file utilities, và editors.
  • Thu hẹp hơn nó là tủng tâm quản lý các tài nguyên của máy tính (CPU, RAM, …)
    Kernel được sử dụng như từ đồng nghĩa cho thuật ngữ operator system.
    Mặc dù có thể chạy chương trình trên máy tính không có một kernel, kernal đươn gản hóa việc viết và sử dụng các chương trình khascm và tăng sức mạnh và tính linh hoạt của lập trình viên. Kernel cũng cung cấp một chương trình quản lý nguồn tài nguyên giới hạn của một máy tính.
    Linux kernel executable có trong /boot/vzlinuz hoặc đau đó tương tự. ngày trước kernel được gọi là unix. Sau này được đổi tên thành vmunix. Trên linux thay chữ z cho chữ x để chỉ ra kernel là một bản compressed executable.

Tasks được gọi bởi kernel.

kernel thực thi một vài task.
Process scheduling. Một máy tính có một hoặc nhiều CPU cái mà thực thi các chỉ thị của chương trình. Giống như UNIX systems Linux là một hệ điều hành đa nhiệm, nghĩa là nhiều tiến trình có thể chạy đồng thời trên bộ nhớ, mỗi cái được sử dụng CPU.

Kernel mode và user mode

Modderrn processor architectures cho phép CPU có thể tổ chức thành ít nhất 2 tùy chọn: user mode và kernel mode (thỉnh thoảng được biết đến như là supervisor mode). Hardware instruction cho phép chuyển đổi qua lại giữa 2 cái. Tương tự các vùng nhớ ảo có thể được đánh dấu như một phần của User space hoặc kernel space. Khi chạy trong user mode, CPU có thể truy cập chỉ các vùng nhớ được đánh dấu là trong user space. Khi chạy trong kernel mode, CPU có thể truy cập tất cả các vùng nhớ.
Chắc chắn hệ điều hành chỉ có thể thực thi khi các bộ xử lý điều khiển trong kernel mode. Ví dụ …

The shell

Một shell là một chương trình được thiết kế để đọc các lệnh được gõ vào từ người dùng và thực thi các chương trình thích hợp tới các lệnh, ví dụ như một Command interpreter.
Thuật ngữ login shell được sử dụng để chỉ ra tiến trình được tạo để chạy một shell khi người dùng đăng nhập lần đầu tiên.

  • Có rất nhiều shell và người dùng khác nhau