Tìm hiểu nhân của hệ điều hành Linux

18 13 0
Tìm hiểu nhân của hệ điều hành Linux

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tìm hiểu nhân của hệ điều hành Linux Nhân (kernel) của Linux gồm 5 tiểu hệ thống chính: 1. Bộ phân thời cho tiến trình (Process Scheduler-SCHED): Như bạn biết về cơ bản PC vẫn là một hệ thống xử lý đơn tức là chỉ có 1 lệnh thực thi tại một thời điểm. Tuy nhiên các hệ điều hành đa nhiệm(multitask) như Windows, Linux v.v đều cho phép nhiều chương trình chạy cùng một lúc. Làm sao chúng làm được như vậy? Bằng cách chuyển quyền thực thi qua lại giữa các chương trình thật nhanh làm cho chúng ta...

Tìm hiểu nhân hệ điều hành Linux Nhân (kernel) Linux gồm tiểu hệ thống chính: Bộ phân thời cho tiến trình (Process Scheduler-SCHED): Như bạn biết PC hệ thống xử lý đơn tức có lệnh thực thi thời điểm Tuy nhiên hệ điều hành đa nhiệm(multitask) Windows, Linux v.v cho phép nhiều chương trình chạy lúc Làm chúng làm vậy? Bằng cách chuyển quyền thực thi qua lại chương trình thật nhanh làm cho có cảm giác chương trình chạy lúc với Ví dụ bạn vừa đánh Winword vừa chơi Winamp thật SCHED chạy Winword 5,10 lệnh xong chuyển qua Winamp 5,10 lệnh chuyển lại v.v Việc nhanh nên bạn khơng có cảm giác Hệ điều hành MSDOS thật hệ điều hành đơn nhiệm, nhiên bạn bẩy ngắt 1Ch (hook interrupt) để giả lập đa nhiệm Interrupt 1Ch thực chất Timer IRQ (6 hay quên rồi) gọi Timer IRQ ngắt cứng tức tín hiệu phát xung gởi tới CPU Mặc định 1/13 giây lần phát xung gởi tín hiệu IRQ đến CPU Khi CPU ngưng lệnh thi hành chuyển qua xử lý ngắt Timer IRQ sau gọi ngắt 1Ch Nếu bạn viết chương trình hook int 1Ch, bạn có cảm tưởng chạy song song với chương trình (thật 1/13s chạy lần) Ứng dụng tơi có viết chương trình chạy banner hình DOS, hay chương trình ping pong gồm hay nhiều trái tim chạy va đập vào cạnh hình, chạy DOS Các hệ điều hành đa nhiệm sau xử dụng nguyên tắc để làm SCHED Tuy nhiên 1/13s khơng đủ nhanh để switch qua nhiều tiến trình xài hàm BIOS ta tăng tốc cho SCHED 1/100s lần chẳng hạn Bộ quản lý nhớ (Memory Manager-MM): Bộ nhớ qui ước (conventional memory) PC có 640K thơi Do chương trình BIOS quản lý tới FFFFF, mà vùng nhớ cao (High memory từ A0000 trở lên) dùng để ánh xạ (map) BIOS, Video card memory thiết bị ngoại vi khác, vùng nhớ xài (Low memory) từ 9FFFF trở xuống Dùng calculator đổi 9FFFF decimal bạn có 640K :)) Chắc bạn ngạc nhiên hỏi RAM 512M mua hết $70 biến đâu rồi??? Hihihi teo lại cịn có page 64K vùng nhớ cao Tuy nhiên bạn thay đổi ánh xạ để truy xuất hết 512M RAM card hình tương tự Ở chế độ bảo vệ (protect mode) CPU 32bít đưa khái niệm virtual memory (bộ nhớ ảo) Lúc process cấp cho 4G virtual memory từ 00000000-FFFFFFFF Nhưng kernel giữ table mô tả ánh xạ page virtual memory với physical memory Physical memory bao gồm RAM swap disk space Tất nhiên 4G virtual memory không ánh xạ đầy đủ (ánh xạ hết lấy cho process khác chạy) Phần lớn có đánh địa , bạn đọc ghi lên kernel allocate từ physical memory Hệ thống file ảo (Virtual File System – VFS) Hệ thống không cung cấp truy xuất đến hệ thống file harddisk mà cho tất thiết bị ngoại vi Nếu Triump tất thời trang ta nói Linux tất file Ý tưởng bắt nguồn từ Unix hệ điều hành sau điều thiết lập theo hướng Đừng quên DOS bạn dùng copy xxx để in file xxx hình Khi “con “ filehandler cho thiết bị xuất chuẩn (console) Giao diện mạng (Network Interface-NET) Linux dựng sẵn TCP/IP kernel Do DOS khơng có nên tác giả chưa hiểu rõ Bộ truyền thông nội (Inter-process communication IPC) Cung cấp phương tiện truyền thơng tiến trình hệ thống Linux Chúng ta tìm hiểu sau Các cấu trúc liệu hệ thống Hệ điều hành Linux hoạt động nhờ vào liệu Task list (Danh sách tác vụ) SCHED lưu liệu cho tiến trình hoạt động Các liệu làm thành danh sách liên kết gọi danh sách tác vụ SCHED có trỏ current để tác vụ active Theo tơi nghĩ liệu phải có giá trị ghi process lúc bị switch Khi tiến trình active trở phải SCHED khơi phục giá trị Memory map(Ánh xạ nhớ) Như giải thích MM cần ánh xạ từ nhớ vật lý cho nhớ ảo 4G tiến trình Ngồi cịn thơng tin để cách lấy thay cho trang cụ thể Tất thông tin chứa memory map memory map chứa trong task list I-nodes VFS dùng i-nodes để định vị file Cấu trúc liệu i-nodes dùng để ánh xạ file block thành địa vật lý trường hợp đĩa cứng đĩa mềm sector, cyclinder head Data connection Mô tả network connection mở Tất cấu trúc liệu bắt nguồn từ task list Mỗi process có trỏ tới cấu trúc memory map, trỏ tới danh sách inode file mở cho riêng process đó, trỏ tới danh sách data connection cho tất network connection mở ************************** Cấu trúc SCHED Bây biết phận trung tâm hệ điều hành Nó chịu trách nhiệm chia thời gian xử dụng CPU cho tất process , process bình thường tiểu hệ thống SCHED chia thành module Module luật định thời (scheduling policy): chịu trách nhiệm phân xử xem process quyền truy xuất CPU Hệ thống hoạt động có thơng suốt hay khơng nhờ vào luật này, tránh trường hợp process lợi dụng sơ hở điều luật mà chiếm thời gian hệ thống qua nhiều làm process khác bị đóng băng (freeze) Module phụ thuộc kiến trúc (architeture-specific): module gồm code assembly phụ thuộc vào loại CPU dùng để suspend hay assume process Module độc lập kiến trúc (architeture-independent): module gọi hàm từ module phụ thuộc kiến trúc module luật để switch giửa process đồng thời cịn gọi hàm MM để thiết lập virtual memory cho process resume Nên nhớ module phụ thuộc kiến trúc khác loại CPU (ỉ386, apha, v.v) module độc lập kiến trúc khơng đổi kĩ thuật lập trình hướng đối tượng biết abstract Module hàm gọi hệ thống (system call) Gồm hàm mà user dùng để tương tác với SCHED Ai lập trình Linux Unix quen với system call Cấu trúc liệu Task list: chứa liệu đủ để suspend resume process Ngồi cịn có dữliệu dùng để thống kê trạng thái hệ thống Các liệu public Các bạn dùng để phân tích hệ thống chạy Cấu trúc MM MM chịu trách nhiệm điểu khiển tiến trình truy xuất tài nguyên nhớ Bản thân CPU có hệ thống quản lý nhớ vật lý mà cho phép ánh xạ giửa nhớ process với nhớ vật lý MM phải lưu trữ ánh xạ cho process Thêm vào MM cịn cho phép swap; di chuyển trang nhớ không dùng xuống ổ cứng cho phép PC dùng nhớ RAM cịn trống MM có module Module phụ thuộc kiến trúc: code gọi lệnh hệ thống quản lý nhớ CPU Module độc lập kiến trúc: ánh xạ cho process swap nhớ ảo Nó định xem phải remove trang , load trang Các lập trình viên Linux khơng thiết kế module policy riêng policy cho MM không thay đổi System call cho phép process tác động lên MM bao gồm xin cấp phát vùng nhớ Cấu trúc VFS VFS thiết kế để thống cách truy xuất tất thiết bị phần cứng Ngồi VFS cịn chịu trách nhiệm load chương trình thực thi Modules Các module thiết bị điều kiển, phần cứng có module thiết bị điều kiển riêng, thường gọi driver Linux hệ điều hành khác cho phép thêm vào driver Module giao diện độc lập thiết bị Cái abstract cho tất driver Các module hệ thống file logic: Trên thực tế có nhiều hệ thống fiel khác nhau, hệ thống file có module điều khiển riêng Module độc lập hệ thống file: Cái abstract cho loại file system mà cho tất driver Ai lập trình driver cho DOS có lẽ nhớ chổ tất driver qui loại loại block lần đọc hay ghi theo block liệu ví dụ disk loại kí tự lần đọc ghi kí tự máy in bàn phím v.v Cuối system call hàm gọi hệ thống cho VFS Cấu trúc NET NET cho phép Linux connect với hệ thống khác mạng Ai biết mạng nhiều loại thiết bị giao thức mạng NET abstract tất cho phép phần khác truy xuất qua mạng mà không quan tâm đền thiết bị giao thức sử dụng NET có module Các Driver cho thiết bị mạng, module cho loại thiết bị Module độc lập thiết bị: abstract tất thiết bị mạng Các Module giao thức mạng: module cho loại giao thức truyền Module độc lập giao thức mạng: abstract cho tất module giao thức mạng driver System call Booting (khởi động)Ở ta phân tích cho hệ thống máy tính PC i386 cịn loại khác khơng biết :) Có bước khởi động máy tính Chương trình BIOS chọn thiết bị boot Chương trình BIOS đọc bootsector từ thiết bị boot lên nhớ Quyền điều khiển chuyển qua cho chương trình bootsector, chương trình đọc tiếp phần setup , chương trình giải nén kernel image nén Kernel giải nén protected mode Khởi động mức thấp assembly code Khởi động mức cao cho C code Bước 1: BIOS POST (Khởi động BIOS) Theo thiết kế máy tính – máy Turing, máy tính thiết bị cho phép chạy chương trình Các máy tinh Casio chẳng hạn chạy chương trình calculator Các máy tinh chạy băng giấy bạn nạp chương trình tay vào chạy kết thúc lại nạp chương trình khác Bản thân máy PC Pent4 đại cho phép chạy chương trình thơi Tuy nhiên chương trình có khả nạp chương trình khác lớn phức tạp (khác với việc nạp tay hồi xưa) chuyển quyền điều khiển cho chúng để tiếp tục dịng lệnh thực thi khơng ngừng tắt máy tính Chương trình ban đầu gọi chương trình khởi động, để thuận tiện người ta nạp vào BIOS gắn chung vào hệ thống PC Mục đích chương trình khởi động nạp cho chương trình hệ điều hành (OS) OS chương trình lập vơ tận (infinite loop) chờ lệnh user để nạp chương trình ứng dụng , chương trình ứng dụng kết thúc quyền thực thị trả cho OS OS lại tiếp tục chờ để nạp chương trình khác Vậy từ khả chạy chương trình người ta phát minh hệ điều hành chương trình cho phép nạp tự động chương trình khác giúp cho máy tính có khả to lớn BIOS -> OS > Application | | a Khi bật điện, Bộ nguồn chạy tạo xung (đồng hồ nhịp - tốc độ Hetz memboard phục thuộc vào đồng hồ này), tín hiệu POWERGOOD gởi vào bus báo cho thiết bị PC b Đồng thời đường #RESET CPU on, CPU khởi động real mode(8086) c Các ghi %ds=%es=%fs=%gs=0, %cs=0xFFFF, %ip=FFF0 d Chương trình kiểm tra thiết bị chạy (giá trị RAM chạy vèo hình) e Bảng interrupt khởi động f Chương trình BIOS Bootstrap Loader chạy qua int 0x19 %dl=dsố hiệu ổ đĩa khởi động Chương trình tải track sector (boot sector) lên địa 0x7C00 Kết luận: Hột Linux xây dựng theo khái niệm hệ điều hành thông thường thôi, nhiên programmer Linux cố gắng phân chia thành nhiều lớp, Lớp sau abstract cho lớp trước Cách cho phép nhiều người khác làm việc phần khác mà hệ thống vẩn đảm bảo tính thống ổn định Okê phần chủ yếu dịch từ Conceptual Architecture of the Linux Kernel http://plg.uwaterloo.ca/~itbowman/CS746G/a1/ Tức cấu trúc khái niệm Chúng ta sâu vào chi tiết phần sau Không thấy đọc có ý kiến nói hết hixhixhix, phần khó Giài thích: Ở từ kĩ thuật cấu trúc máy tính , tơi khơng tiện giải thích cặn kẽ tốn nhiều thời gian Bootsector phần setupĐĩa cứng đĩa mềm lưu trữ ghi liệu thành rãnh (track) vòng tròn đồng tâm Đầu từ ổ đĩa không đọc hay ghi bit hay byte liệu mà đoạn track, học hình học biết đoạn đường tròn gọi cung (sector) Mỗi sector thường lưu trữ 512 bytes Track gọi track đĩa mềm định vị lổ tròn to tướng Sector sector track (đánh số bị kì phải nhớ) gọi bootsector BIOS tải lên boot Tồn chương trình khởi động mềm 512bytes nằm sector Bây download source code linux kernel 2.4 từ site www.kernel.org khoảng 34M không chép từ đĩa cài đặt Linux Mở file: arch/i386/boot/bootsect.S Đây source code viết ngôn ngữ assembly cho Linux bootsector Ở programmer Linux thích kĩ (khơng source code Vietnam :)) Chép 512 bytes bootsector từ vị trí khởi đầu mà BIOS POST tải lên 0x7C0:0 đến ví trí cuối vùng nhớ qui ước 0x9000:0, jmp tới Chổ chưa hiểu ý định người lập trình chương trình khởi động DOS khơng làm Có lẽ vùng nhớ 0x7C00 nhanh chóng bị chép đè chương trình tải lên sau Stack khỏi động khoảng segment 0x9000 Khởi tạo bảng tham số ổ dĩa (disk parameters table) Phần cứng ổ đĩa hoạt động phụ thuộc bảng tham số Mặc định có bảng tham số nằm BIOS, nhiên nhiều BIOS set chế độ đọc sector Linux programmer set lại chế độ đọc nhiều sector lúc để tăng tốc độ tải HĐH Bảng tham số chép đoạn stack (stack chạy ngược lên nên bảo đảm không đụng hàng) gồm 12 bytes Bytes 0x4 liệu chứa số sector maxium đọc lúc patch thành 36 – 36 số sector track ổ đĩa 2.88M, set cao loại ổ đĩa giá trị thực tế khác; trích từ thích người lập trình “high doesn’t hurt but low does” Tính tốn số sector track Hồi xa xưa phần nhức đầu với bác viết bootvirus Gần khơng có cách xác với xác định FAT12 FAT16 Tuy nhiên cách giải tay Linux programmer hay Lần lựa đọc sector cao ổ đĩa 36 2.88M 18 1.44M thường dùng 15 1.2M đĩa to bánh tráng 760K to có mặt thơi Có điều đĩa 1.44M bị lỗi sector 18, Linux lại hiểu 1.2M :), mà kệ hỏng sector track coi vứt Lúc Linux in dòng chử : “Loading” lên hình Chương trình setup Linux nằm sector bootsector tải lên sau bootsector: 0x90200 Số sector cho phần setup mặc định Mỗi lần đọc track in dấu chấm hình Tiếp theo chương trình system dạng nén(compressed kernel image) tải vị trí 0x10000 - chừa 64K low memory Kích thước mặc định 0x7F00 tính theo đơn vị 16-bytes = 508K Linux cịn có chể độ big-kernel kernel image vượt nhớ qui ước 640K Khi code phần setup có hàm bootsect_kludge nằm offset 0x220 chịu trách nhiệm tải kernel vào nhớ cao Kết thúc trình tải setup system, chương trình setup thực segment 0x9020 Mở file: arch/i386/boot/setup.S Đây source code viết ngôn ngữ assembly cho Linux setup Phần setup tải loader khác bootsect.S loader chuẩn Linux thơi ngồi còn LILO hay Loadin v.v Mở đầu setup check xem có tải đầy đủ khơng Nên khơng cố gắng tải lại cho đủ Nếu khơng đành báo lỗi “loader sai Pó tay ” Kiểm tra kích thước nhớ Nhưng ta đề cập nhớ cao máy tính (từ 640K trở lên) phức tạp Linux dùng cách khác để detect Cách E820h, dùng hàm ax=E820, int 15h để kiểm tra Nếu thất bại dùng hàm ax=E801h, int 15h Cuối dùng cách ax=8800h, int 15h cách cổ điển cho memory 64M Tiếp theo setup gọi hàm video nằm file video.S code assembly để detect chế độ đồ hoạ Lấy disk parameter table harddisks Các bảng nằm BIOS, trình BIOS detect thiết bị bạn set tay bảng BIOS Sau q trình BIOS POST, vị trí bảng đặt 0:(4 * 41h) cho hd0 0:(4 * 46h) cho hd1 Check MCA bus hàm c0h int 15h Check chuột PS/2 dùng int 11h Check APM bios: cách Thiết lập protected mode Chuyển từ real mode sang protected mode Protected mode Thật khó để định nghĩa protected mode Chúng ta quay trở lại thời kì CPU 8086 8086 bao gồm ghi 16 bít (2 bytes) AX: Accumulate – ghi tích lũy ax thường lưu giữ kết phép tính tốn học BX: Base – ghi sở bx thường dùng để định vị [bx+??] CX: Count – ghi đếm cx thường dùng chứa số đếm lệnh loop rep DX: Data – ghi liệu dx thường chứa liệu phép tinh toán học SI,DI: source index, destination index-thanh ghi mục địa nguồn địa đích SP: stack pointer: ghi trỏ stack IP: intruction pointer: ghi trỏ lệnh BP: base pointer: ghi trỏ sở dùng định stack frame cấu trúc ngôn ngử bậc cao CS: code segment: ghi đoạn lệnh DS: data segment: ghi đoạn liệu ES: extra segment: ghi đoạn liệu SS: stack segment: ghi đoạn stack Để xác định vị trí nhớ cần cặp ghi seg index: CS:IP trỏ đến code thi hành DS:SI: trỏ địa liệu nguồn ES:DI: trỏ địa liệu đích SS:SP: trỏ stack SS:BP: trỏ stack frame 8086 không phân biệt đâu nhớ code, data hay stack Nếu CS=DS code data mà data code Ngồi khơng có hạn chế gì, bạn tự đọc thi hành hay thay đổi code, liệu tất memory vị dụ kernel DOS tải lên vùng nhớ 0x40000, bảng Interupt 0x0, thay đổi chương trình bình thường Rõ ràng 8086 thích hợp cho hệ thống người dùng Bắt đầu từ 80286 CPU 16 bít protected mode 80386 CPU 32 bít protected mode Tất dịng CPU Intel sau Pent IV chung kiến trúc protected nên người ta gọi dòng i386 Ở chế độ protected mode, nhớ máy tính bảo vệ chặt chẽ việc truy xuất phần cứng CPU kiểm soát Lúc địa xác định ghi segment selector 16 bít mục 32 bít Có ghi segment selector cs,ss,ds,es,gs,fs.Điểm khác ghi segment selector ghi segment 8086 chổ ghi segment xác định trực tiếp vùng nhớ ghi segment selector lại xác định segment descriptor (mô tả đoạn) bảng mô tả Rồi giá trị segment descriptor giúp xác định nhớ vật lý Bảng mô tả nhớ: Bộ nhớ máy tính chia nhỏ thành nhiều đoạn Cách thức chia nhớ mô tả bảng mơ tả (Nếu bạn khơng hình dung nhớ đến việc chia đĩa cứng thành nhiều đĩa logic cần bảng partion , bảng mơ tả cách thức chia đĩa) Có loại bảng mô tả - GDT(Global Descriptior Table) LDT(Local Descriptor Table) Chỉ có bảng GDT build nhớ vị trí bảng chứa ghi gdtr CPU Mỗi process có bảng LDT riêng mơ tả cách phân chia riêng cho process -tất nhiên cho vùng nhớ mà có quyền thơi Địa LDT nằm ghi ldtr Mỗi swap process ta cần load lại ldtr có phân vùng nhớ cho process Mỗi đoạn mơ tả bytes bảng mơ tả Bao gồm: 32 bít Base: địa phẳng byte đoạn vùng nhớ 4G Cờ G bít: định kích thước đoạn tính theo byte, tính theo 4096 bytes 20 bít Limit: kích thước đoạn G=0 đoạn có size=1bytes1Mbyte(2^20) G=1 đoạn có size=4K-4G Cờ S bít: S=0: đoạn kernel, S=1: đoạn bình thường bít Type: có type sau đây: Code, Data, Task State đoạn đặc biệt có GDT dùng để nơi chứa liệu liên quan task Khi SCHED muốn swap task đọc phục hồi giá trị task Local Descriptor Table đoạn đặt biệt chuyên chưa LDT task có GDT bít DPL: Quyền thấp truy xuất đoạn CPU i386 cho mức quyền cao tương đương với kernel Còn User Application Nếu DPL cho segment user application truy xuất vào đoạn Các bít cịn lại khơng dùng Các ghi segment selector (cs,ds,ss,es,gs,fs) Mỗi giá trị set ghi segment selector CPU tìm bytes mô tả tương ứng selector tải vào ghi nội Vì việc chuyển địa khơng cần truy xuất GDT hay LDT cách thường xuyên Mỗi ghi segment selector có 16 bít đó: 13 bít mục:chỉ mục GDT hay LDT Cờ bit TI : 0: đoạn GDT, 1: đoạn LDT bít RPL: Từ 0-3 mức yêu cầu truy cập đoạn có tác dụng với CS Theo tài liệu Intel process set ghi CS RPL nạp với mức thấp hay mức mà process có quyền Theo tơi hiểu process kernel chạy đoạn code với quyền thấp ví dụ set RPL=3 chẳng hạn Vậy địa Base đoạn + giá trị ghi mục (ebx,esi,edi v.v) theo tơi thường thấy chương trình 32bít thường set base tất đoạn =0 hết Mục bảng mơ tả ln tồn số 0, segment selector =0 invalid Do segment selector có 13 bít mục nên số segment bảng mô tả tối đa 2^13 –1 = 8191 Linux Protected Mode Nếu bạn choáng phức tạp chế độ protected mode (thực cịn nhiều nữa), may mắn cho bạn cho tơi cho lập trình viên Linux không mà implement hết Giống Windows, Linux làm protected mode đơn giản thơi có mức cho Kernel cho User Application Vấn đề tương thích với kiến trúc CPU khác Tất phân đoạn Linux dùng GDT không cần LDT Có bảng GDT bao gồm: Null Kernel Code Segment: Chứa code kernel Base=0 Limit=0xFFFF G=1 S=1 Type=A đọc thi hành (không modify được) DPL=0 Kernel mode only Kernel Data Segment: Chứa liệu kernel Base=0 Limit=0xFFFF.G=1.S=1 Type=2 đọc ghi (không thi hành được) DPL=0 User Code Segment: Chứa code segment cho tất user proccess Base=0 Limit=0xFFFF.G=1.S=1 Type=A DPL=3 User Data Segment: Chứa data segment cho tất user process Base=0 Limit=0xFFFF.G=1.S=1 Type=2 DPL=3 Default null LDT Ngồi cịn segment cho APM (advenced power mangement) , segment để dành Mỗi process có TSS Segment đây: Base lúc địa bảng ghi process G=0 Limit=236 đoạn có 236 bytes DPL=0 kernel only Mỗi process có LDT segment Default null để không dùng LDT Ai thích dùng phải tự viết GDT có tối đa 2^13 8192 mục Trừ 14 mục system cịn 8178 /2= 4089 process Như Linux khơng thể có 4089 proccess .. .Nhân (kernel) Linux gồm tiểu hệ thống chính: Bộ phân thời cho tiến trình (Process Scheduler-SCHED): Như bạn biết PC hệ thống xử lý đơn tức có lệnh thực thi thời điểm Tuy nhiên hệ điều hành. .. chuyển qua Winamp 5,10 lệnh chuyển lại v.v Việc nhanh nên bạn khơng có cảm giác Hệ điều hành MSDOS thật hệ điều hành đơn nhiệm, nhiên bạn bẩy ngắt 1Ch (hook interrupt) để giả lập đa nhiệm Interrupt... Interface-NET) Linux dựng sẵn TCP/IP kernel Do DOS nên tác giả chưa hiểu rõ Bộ truyền thông nội (Inter-process communication IPC) Cung cấp phương tiện truyền thơng tiến trình hệ thống Linux Chúng ta tìm hiểu

Ngày đăng: 20/05/2021, 08:40

Mục lục

  • Tìm hiểu nhân của hệ điều hành Linux

Tài liệu cùng người dùng

Tài liệu liên quan