1. Trang chủ
  2. » Thể loại khác

Share to be shared Căn hệ điều hành NachOS

38 157 0

Đ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

Cấu trúc

  • Lời tỉ tê :

  • II - Cài đặt NachOS

    • GCC 3x

    • GCC 2.95.3

    • Một số chú ý khi biên dịch và cài đặt NachOS

  • III - Tổng quan NachOS

  • IV - Thành phần của hệ thống NachOS và 2 chế độ User MODE , System MODE (Kernel MODE)

  • V - Quá trình biên dịch chương trình người dùng trên NachOS

  • VI - System call

    • Lần theo dấu vết

    • Tạo 1 system call mới như thế nào ?

  • VII - Tiến trình

    • Tiến trình được nạp vào bộ nhớ như thế nào ?

    • Đa chương

  • VIII - Lời kết và những câu hỏi

    • Vấn đề biến toàn cục:

    • Vấn đề tạo một class mới:

    • Vấn đề đa chương:

    • Vấn đề đồng bộ :

Nội dung

Share to be shared Căn hệ điều hành NachOS  Tổng quan – System Call – Process (Thread) – Đa chương _.:Gió Reo:._ Mục lục : Lời tỉ tê : I - Giới thiệu NachOS .6 II - Cài đặt NachOS GCC 3x GCC 2.95.3 Một số ý biên dịch cài đặt NachOS 11 III - Tổng quan NachOS 14 IV - Thành phần hệ thống NachOS chế độ User MODE , System MODE (Kernel MODE) 16 V - Quá trình biên dịch chương trình người dùng NachOS 21 VI - System call 23 Lần theo dấu vết 23 Tạo system call ? 27 VII - Tiến trình 30 Tiến trình nạp vào nhớ ? .30 Đa chương 32 VIII - Lời kết câu hỏi .35 Vấn đề biến toàn cục: 35 Vấn đề tạo class mới: 35 Vấn đề đa chương: 36 Vấn đề đồng : 36 Lời tỉ tê : Sau tìm tài liệu NachOS mạng tài liệu tiếng Việt nói hệ điều hành , có anh chị năm ngoái , nhiên , anh chị đơn code code , muốn hiểu khó , nhiều lúc , lại dễ bị ảnh hưởng lối viết code người khác ^_^ ! Chính lý , sau học kỳ cực nhọc với NachOS , rút số vấn đề cần phải thấu đáo bạn nghiên cứu NachOS Nghiên cứu NachOS , ta lợi ? Khi nghiên cứu NachOS , ta có hội mô lại hành động hệ điều hành thật cấp phát nhớ , tạo tiến trình , quản lý tiến trình , đồng tiến trình cách dùng semaphore , quản lý xuất nhập I/O … Trong tài liệu ,mình chủ yếu lấy tài liệu NachOS trường đại học Khoa Học Tự Nhiên TPHCM , nơi theo học Có vẻ khó khăn với bạn học khác trường , khác khóa với nơi , khóa có tài liệu khác Nhưng bản, NachOS , đâu , bạn đừng lo lắng Trong tài liệu này, gợi ý bạn hướng để nghiên cứu tìm hiểu NachOS sâu vào số vấn đề cần thiết không show hết toàn Nếu show hết bạn bị ảnh hưởng code , khơng tốt , phải tốn xíu thời gian cho NachOS kết đạt có giá trị , sung sướng zà zui zẻ ko :D À , , HÃY TẬP ĐỌC TÀI LIỆU TIẾNG ANH nha bạn ^ ^ !! Nếu bạn có khả đọc tiếng Anh cố gắng đọc , thời gian Mình tạm gọi hiểu NachOS nhờ ngồi giựt tóc mà đọc tài liệu tiếng Anh không !! Trước tiếp tục , bạn nên coi qua tài liệu , giúp bạn sử dụng thành thạo với Linux trước tiếp tục công việc ^ ^ CLICK HERE TO DOWNLOAD ==> [dành cho chưa lần chiêm ngưỡng vẻ đẹp đầy bí ẩn cô nàng Linux] Đặc biệt ý cách sử dụng đường dẫn tuyệt đối đường dẫn tương đối linux nha ! Các tài liệu tham khảo khác sử dụng tài liệu (có đính kèm) : + Bien_dich_va_Cai_dat_Nachos.pdf + Giao_tiep_giua_HDH_Nachos_va_chuong_trinh_nguoi_dung.pdf + narten-roadmap.pdf + nachos_study_book.pdf Các bạn ý tài liệu viết dựa chủ yếu vào tài liệu , tài liệu tiếng Việt trường , nên lời khuyên bạn đọc sơ lược qua tài liệu (dẫu ko hiểu trọi :D) Nói chung , bạn cố gắng đọc hết tài liệu tiếng Anh coi bạn khỏi đọc tài liệu , Master hi hi hi !! Mà dù , bạn phải lao đầu vào đọc tài liệu tiếng Anh !! ‘(-.-‘) Và cuối , bạn nắm vững lý thuyết lớp : quản lý tiến trình , nhớ , đồng hóa … trước tiếp tục nghiên cứu !!! Và đọc tài liệu phải đôi với thực hành , đọc suông !! Bạn muốn hiểu thực hành NachOS chuyện hai ngày mà rai lai từ nửa đến nguyên tháng Nó kết cấu từ nhiều class , nhiều file link qua link lại , link tới link lui chết ln … Hãy đảm bảo bạn có khả bình tĩnh kiên trì ngồi NachOS cịn có vấn đề khác lỗi cài đặt , lỗi Linux , lỗi WinSCP , lỗi putty , đống lỗi tè le ko có lý ko hiểu khiến ta điên lên muốn đập nát hình … Goodluck ! Lời cảm ơn Gửi lời cảm ơn chân thành em đến thầy mơn Mạng Máy Tính khoa Cơng Nghệ Thơng Tin trường đại học Khoa Học Tự Nhiên TPHCM thầy Phạm Tuấn Sơn , thầy Vũ Minh Trí , Trần Hồng Ngọc bạn khóa học môn Hệ Điều Hành  ^(*, ,*)^ hù hù Phương pháp học đề nghị : Đọc kỹ tài liệu trước Lấy giấy bút ghi lại khai báo class cần thiết thích thứ Đọc hiểu đến đâu, thực hành tới , tị mị Đọc hồi khơng hiểu mở máy mà thực hành Thực hành làm hồi khơng mở tài liệu đọc lại Đọc thực hành hồi khơng … hỏi người khác Chưa nhận trả lời chơi , đú đởn hoa cành Đú đởn xong quay làm lại bước … Hãy tập thiền tịnh mơn nhiều lúc muốn tạt nước máy tính … Bí hết cỡ , bí đường coi code làm sẵn … Copy code …  … Oh, U’re loser … I - Giới thiệu NachOS NachOS , pé Tự Nhiên gọi naCHÓ , =)) , tên thật Not Another Completely Heuristic Operating System - Một phần mềm giả lập hệ điều hành với kiến trúc MIPS [ Million Instructions Per Second ] Trong tài liệu , NachOS chạy môi trường Linux với kiến trúc x86 II - Cài đặt NachOS Khi cài đặt NachOS , bạn cần phải cài đặt gói phần mềm NachOS trình biên dịch GCC dành cho trình biên dịch chương trình người dùng hệ điều hành NachOS (Mình gọi tắt GCC 2.95.3 nha , cịn nói sau, GCC 2.95.3 ko chạy NachOS mà chạy Linux ,nó hỗ trợ biên dịch thoy :D) Bạn xem file Bien_dich_va_Cai_dat_Nachos.pdf để biết “nguyên liệu” cần thiết trước bắt đầu cài NachOS Bao gồm : + binutils-2.11.2.tar.gz + gcc-2.95.3.tar.gz + nachos-3.4.tar.gz Xét cho , NachOS chương trình phần mềm cài đặt hệ điều hành Linux mà Vậy , để cài NachOS , tức cài phần mềm lên máy sử dụng hệ điều hành Linux ta phải làm ? (giờ bạn đừng quan tâm NachOS GCC cho NachOS hết nha, coi phần mềm cần phải cài đặt) + Các cách cài đặt phần mềm Linux : Trên Linux có cách cài đặt - vào Add/Remove chọn gói thích rùi cài vào từ đĩa hay từ mạng Internet Ủa, gói đâu có sẵn cho cài ?? Mấy gói phần mềm gói công ty hỗ trợ Linux mà bạn sử dụng cung cấp cho bạn , tự distro Linux kiếm cập nhật ngày server cộng đồng Linux ( hay công ty bảo trợ cho Linux bạn sử dụng) - tìm gói phần mềm cài đặt sẵn ( giống file cài đặt setup.exe hay install.exe windows ) Đối với dòng Linux Redhat rpm cịn với dịng Debian deb , nhấp chuột vào tự cài - biên dịch lại source code phần mềm ( mã nguồn mở mà , người ta gửi code , diên dịch lại để xài thoy , phải qua bước compiler , link ) Tức có mã nguồn tay , dùng trình biên dịch , biên dịch , giải mã mã nguồn thành mã máy , thành file thực thi để chạy Giống windows , bạn dùng VC++ để biên dịch tập tin hello.cpp sau #include void main() { printf(“Hello world !!!”); } Thành file hello.exe để thi hành Và trình cài đặt GCC 2.95.3 NachOS cách thứ (hix) … Còn Binutils ( Binary Utilitys ) dạng dạng tập cơng cụ lập trình thư viện v v v dùng để tạo thư viện hợp ngữ hay gì ( hỏi anh gu gồ đẹp trai , hem biết ^ ^) **** Các vấn đề cách cài đặt phần mềm thứ : Biên dịch code ***** Để biên dịch từ mã nguồn (ở mã nguồn C) thành file nhấn vào chạy Linux , ta có compiler ( trình dịch) GCC (GNU Compiler Collection) [ Cái GCC gần tương ứng với VC++ Windows , VC++ trình biên dịch kết hợp với trình soạn thảo ln , cịn GCC ko có , GCC đảm nhiệm việc biên dịch ] Vậy , ý lại , ta có mã nguồn viết = C NachOS , để tạo chương trình NachOS chạy Linux ta phải biên dịch mã nguồn C GCC Tóm lại , NachOS phần mềm Linux , ta dùng GCC Linux để biên dịch , cài đặt [nói chung , nhiên , sâu vào việc cài đặt có số thay đổi nhỏ mà quan trọng] Để tiếp tục nói tiếp phần cài đặt NachOS chi tiết , phải rẽ qua vài khái niệm chút để bạn hình dung trình cài NachOS , gõ lệnh , ý nghĩa , làm ! Sau phần nói sơ GCC , tiếp tục nói việc cài đặt NachOS Như nói , hệ điều hành Linux , thường có tích hợp trình biên dịch GCC (đóng vai trị ~ VC++ windows).Để kiểm tra xem máy có cài gcc chưa , vào Terminal gõ gcc version , phiên gcc coi có máy (lưu ý , với mã nguồn NachOS 3.4 biên dịch tốt , ko lỗi với GCC phiên từ 3.0 đến 4.0) Nếu khơng có , bạn cài từ đĩa CD cài đặt cách vào Add/Remove Application tick chọn Development Tools (với RedHat 9) Sau , Linux tự cài cho bạn Rồi , OK, tóm lại , Linux , phải có trình biên dịch GCC để biên dịch mã nguồn thành chương trình thực thi Mình gọi GCC Linux GCC 3x ! GCC 3x Là trình dịch mã nguồn cho Linux , chạy hệ điều hành Linux/nền kiến trúc x86 , biên dịch mã nguồn cấp cao C thành mã máy cho Linux/nền kiến trúc x86 hiểu GCC 2.95.3 Đấy GCC mà phải cài cài đặt NachOS , GCC 2.95.3 cài gói gcc-2.95.3.tar.gz Là trình dịch mã nguồn cho Linux , chạy hệ điều hành Linux/nền kiến trúc x86 , biên dịch mã nguồn cấp cao C thành mã máy cho Linux/nền kiến trúc MIPS hiểu 10 VI - System call Là ? Là lời nhờ vả chương trình người dùng khơng làm điều , cần đến giúp đỡ hệ điều hành :D Cứ cho hàm API ^_^ Bạn nhớ ý , hiểu bí kíp system call ngộ đạo NachOS , dĩ bất biến , ứng vạn biến , tung hoành ngang dọc , danh trấn giang hồ , sau có phức tạp , thiên biến vạn hóa , xét cho thứ bèo bọt … … nổ xíu thoy  Để hiểu system call , ta phải chạy thử chương trình có gọi system call Yêu cầu : mở file Giao_tiep_giua_HDH_Nachos_va_chuong_trinh_nguoi_dung.pdf coi Lần theo dấu vết Chúng ta coi cách mà chương trình halt.noff thực thi tài liệu vẽ Halt.c Nhận xét : Trong chương trình Halt , chẳng có +-*/, hay khai báo biến , while, if mà có hàm tên Halt() Hàm gọi system call (lời gọi hệ thống) có nhiệm vụ tắt máy ảo Như định nghĩa lời nhờ vả chương trình người dùng khơng làm điều , cần đến giúp dỡ hệ điều hành Chương trình Halt ko thể tự tắt máy , mà phải cần đến hệ điều hành tắt máy cho Sau nạp vào RAM ảo , CPU MIPS bắt đầu nạp lệnh halt.noff để thực thi lệnh 24 halt.noff = tập mã máy MIPS = start.o + hatl.o Sau , dùng hợp ngữ start.s halt.s để diễn tả phần tương ứng Khi chạy halt.noff , chạy từ xuống , chạy vào phần mã máy start trước Đầu tiên nhảy vào hàm main () halt.c lệnh jal main Sau , dựa vào tên hàm system call Halt nhảy đến nhãn (label) – tên hàm nhãn , đơn giản - tương ứng với hàm 25 Tại vị trí label , ta thấy có dịng lệnh addiu $2,$0,SC_Halt Ý nghĩa : Cho mã system call Halt SC_Halt (là số nguyên) vào ghi thứ syscall Ý nghĩa : Lệnh để gọi xử lý system call Khi nạp lệnh , máy ảo giải mã lệnh , nhận thấy opCode lệnh OP_SYSCALL gọi hàm Raise Exception Trong hàm , đơn giản chuyển ngắt qua system mode , thực xử lý system call , sau chuyển lại qua user mode để chạy tiếp chương trình Hiện , hàm Exceptionhandle có xử lý trường hợp cho system call Halt – tắt máy mà thơi , cịn system call khác chưa có 26  Nhiệm vụ nhà phát triển nhân hệ điều hành tạo nhiều system call cung cấp cho nhà phát triển phần mềm viết chương trình  Từ , ta nhận xét , file start.s tương tự thư viện lập trình cung cấp cho nhà lập trình phần mềm ứng dụng sử dụng Hễ nhà viết nhân hệ điều hành tạo system call họ cung cấp cho nhà lập trình phần mềm hàm system call file start.s Các bạn nhận thấy , cung cấp hàm Hatl() , nhà lập trình phần mềm chẳng cần quan tâm bên có , muốn tắt máy , cần gọi Halt() ok! Đối với nhà lập trình nhân hệ điều hành có phần phức tạp , họ phải viết nội dung mà hệ điều hành phải xử lý nhận system call Halt() , họ phải thêm vào thư viện hàm start.s để nhà lập trình phần mềm sử dụng Vai trị file start.s làm rõ phần sau , cách tạo system call ! 27 Tạo system call ? Để tạo system call cho nhà lập trình phần mềm sử dụng , bạn phải xem xét file , trải qua bước sau (Coi mũi tên sau cùng): (mình dùng ví dụ tạo system call Create ,hàm dùng tạo file)  Khai báo system call /code/userprog/syscall.h Định nghĩa mã system call #define SC_Create Khai báo tên hàm system call int Create(char* name);  Thêm đoạn mã start.s start.c , phần để người dùng gọi hàm (thư viện hàm) Nó gọi đến system call tương ứng sau : globl Create ent Create Create://Cái nhãn,dùng để nhảy đến hợp ngữ,tên nhãn=tên hàm addiu $2,$0,SC_Create //Cho mã SC_Create=4 vào ghi syscall //Gọi hệ điều hành xử lý giùm system call Create j $31 end Create  Hệ điều hành nhận system call , phải phân loại chúng thuộc system call dạng , tắt máy , ghi file ,tạo file , in hình , nhập từ bàn phím hay v…v…v Sau , bạn bạn phải code cách xử lý chúng Đến coi bạn tạo xong system call void ExceptionHandler(ExceptionType which) //Kiểu Exception { int type = machine->ReadRegister(2); // Đọc ghi thứ để biết mã System call switch (which){ case NoException: return; 28 case SyscallException: //Nếu Exception which System Call … switch (type){ // type thuộc dạng System Call … case SC_Halt: // Nếu system call Halt DEBUG(dbgAddr, "\n Shutdown, initiated by user program."); printf ("\n\n Shutdown, initiated by user program."); interrupt->Halt(); //Thực Halt máy … break; case SC_Open: //Thực xử lý mở file break; case SC_Close: //Thực xử lý đóng file break; case SC_Read: //Thực xử lý đọc file break; case SC_Write: //Thực xử lý ghi file break; case SC_Create: //Thực xử lý tạo file break; … vân vân vân … default: printf("\n SyscallException: Unexpected system call %d", type); //break; Mặc định Halt máy interrupt->Halt(); } //printf("\n Incrementing PC."); DEBUG(dbgAddr, "\n Incrementing PC."); AdvanceProgramCounter(); break; default: printf("\n Unexpected user mode exception (%d %d)", which, type); interrupt->Halt(); } } VÍ DỤ : Trình tự + trình cần thực hàm Create: o Yêu cầu bạn phải mở tài liệu tiếng Anh đọc sơ qua hệ thống file NachOS Mình nói sơ qua thơi , NachOS có hệ thống file , hệ thống file dùng hệ thống file Linux (Unix) Hiện , NachOS xài hệ thống file thứ , nên việc tạo file 29 , thông qua lớp fileSystem , lớp fileSystem lại dùng hàm Linux để tạo file :D !! o Đầu tiên chương trình người dùng muốn tạo file tên char* X = “abc.txt” Chuỗi X nằm vùng nhớ chương trình người dùng , USER MODE Chương trình người dùng dùng đến system call Create(X); để nhờ vả hệ điều hành NachOS làm giùm o Bây ta xem xét chi tiết việc xử lý hàm tạo file (Create) ? o Chương trình ngủ , hệ điều hành NachOS vươn vai thức dậy , đọc ghi R2 , biết nhiệm vụ tạo file Nhưng , biết tạo file tên , hiểu biến phạm vi vùng nhớ , tức KERNEL MODE thơi , cịn USER MODE biết chỗ đâu lấy … hix hix … Thế là, , nhà lập trình nhân hệ điều hành sáng giá , dựa tính chất sau !! Tham số thứ hàm nằm ghi R4 Tham số thứ hai hàm nằm ghi R5 Tham số thứ ba hàm nằm ghi R6 … Đó , dựa vào , ta cần cho NachOS đọc ghi R4 biết vị trí bắt đầu chuỗi đâu vùng nhớ USER MODE o Sau , qua hàm User2System , hệ điều hành NachOS copy chuỗi X “abc.txt” thuộc USER MODE qua chuỗi Y vùng nhớ KERNEL MODE ( chuỗi Y giống hệt chuỗi X ) NachOS tạo file dựa chuỗi Y o Xử lý èo èo xong , hệ điều hành NachOS ngủ , chương trình người dùng chạy tiếp ! Tiếp tục cơng việc nạp , giải mã , thực thi lệnh … Rồi , bạn tạo xong system call Create(char* x); !!! Mọi nhà lập trình phần mềm sử dụng system call bạn để viết phần mềm ^ ^ !! Các system call khác tương tự y !! 30 VII - Tiến trình Tiến trình nạp vào nhớ ? Xin mời bạn quay lại câu lệnh /userprog/nachos –rs 1023 –x /test/halt Trong /userprog/nachos thể mở chương trình nachos lên , nạp vào nhớ chạy , y chương trình khác Linuz Kwrite , FireFox … /test/halt thể mở chương trình halt lên để nạp vào nhớ máy MIPS ảo chạy Tiến trình chạy mở NachOS lên , gọi tiến trình Hiện , NachOS hệ điều hành đơn nhiệm , cho phép chạy tiến trình thơi Một tiến trình bao gồm nhiều thành phần : class Thread { private: // NOTE: DO NOT CHANGE the order of these first two members // THEY MUST be in this position for SWITCH to work int* stackTop; // the current stack pointer int machineState[MachineStateSize]; // all registers except for stackTop public: Thread(char* debugName); // initialize a Thread debugName tên Thread ~ đường dẫn tương đối đến file thực thi Thread Thread(char* debugName, int priority);// init with a given priority ~Thread(); // deallocate a Thread // NOTE thread being deleted // must not be running when delete // is called // basic thread operations void Fork(VoidFunctionPtr func, int arg); void Yield(); void Sleep(); void Finish(); // Make thread run (*func)(arg) // Relinquish the CPU if any // other thread is runnable Pause // Put the thread to sleep and // relinquish the processor // The thread is done executing void CheckOverflow(); // Check if thread has // overflowed its stack void setStatus(ThreadStatus st) { status = st; } char* getName() { return (name); } void Print() { printf("%s, ", name); } private: 31 // some of the private data for this class is listed above int* stack; // Bottom of the stack // NULL if this is the main thread // (If NULL, don't deallocate stack) ThreadStatus status; // ready, running or blocked char* name; //Tên tiến trình = đường dẫn tương đối đến file chương trình void StackAllocate(VoidFunctionPtr func, int arg); // Allocate a stack for thread // Used internally by Fork() #ifdef USER_PROGRAM // A thread running a user program actually has *two* sets of CPU registers -// one for its state while executing user code, one for its state // while executing kernel code int userRegisters[NumTotalRegs]; public: void SaveUserState(); void RestoreUserState(); AddrSpace *space; #endif }; // user-level CPU register state // save user-level register state // restore user-level register state //Vùng nhớ tiến trình RAM ảo Để coi kỹ cách tạo dựng tiến trình , mời bạn vào threads/main.cc Trong threads/main.cc gọi đến hàm StartProcess userprog/progtest.cc Hàm StartProcess làm công việc sau: - Nạp file.noff vào nhớ ảo máy MIPS (class AddrSpace) - Trỏ vùng nhớ currentThread vào vùng nhớ vừa nạp (con trỏ AddrSpace) - Khởi tạo ghi - Cho chạy máy ảo void StartProcess(char *filename) { OpenFile *executable = fileSystem->Open(filename);//Mở file noff AddrSpace *space; if (executable == NULL) { printf("Unable to open file %s\n", filename); return; } space = new AddrSpace(executable);//Nạp file noff vào nhớ currentThread->space = space; //*****Chú ý - Nói sau***** delete executable; // close file space->InitRegisters(); // set the initial register values 32 space->RestoreState(); machine->Run(); ASSERT(FALSE); // load page table register // jump to the user progam // machine->Run never returns; // the address space exits // by doing the syscall "exit" } Ở cách tiến trình nạp vào hệ thống Các tiến trình khơng phải , tương tự khác chút xíu nơi khai báo hàm StartProcess (cịn tùy , thường tiến trình sau gọi StartProcess exception.cc , hàm copy từ hàm StartProcess gốc userprog/progtest.cc) Đa chương Để NachOS biến thành hệ điều hành đa nhiệm , bạn phải nạp thêm 2,3… tiến trình khác cho chúng chạy “song song” Để làm điều , bạn phải ý điều sau  Từ tiến trình , bạn tạo tiến trình qua system call Exec()  Chú ý số lượng tiến trình , kích thước chương trình nạp vào RAM , RAM máy ảo MIPS nhỏ , bạn reisze lại RAM (machine.h)  Ta phải quan tâm đến việc nạp chương trình vào nhớ cho ta nạp tiến trình vào nhớ mà không xảy việc nạp đè lên vùng nhớ tiến trình khác Điều gây nên sụp đổ hệ thống  Giải kỹ thuật phân trang : Paging Xem hàm khởi tạo AdrressSpace , việc nạp file noff vào tiến trình , ta chỉnh lại cách nạp file noff vào nhớ Chỉnh lại ? Cái bạn phải tự suy nghĩ , thật đơn giản mà , với điều kiện bạn phải nắm kỹ kỹ thuật Paging trang (Page) ứng với khung trang (Frame) Khung trang NachOS tên PhysPages – trang vật lý Cách làm giống tìm lỗ trống để nhét hịn bi vào mà thơi Gợi ý : Bạn sử dụng class BitMap để đánh dấu khung trang trống , class BitMap giống mảng cờ hiệu thơi mà , bạn tự tìm hiểu 33  Và vấn đề cuối liên quan đến hàm Thread::Fork (đọc kỹ tài liệu tiếng Anh nachos_study_book)!! o Các bạn ý thân hàm StartProcess , có dịng mà gạch đỏ ý currentThread->space = space Như nói điều : “Từ tiến trình , bạn tạo tiến trình qua system call Exec()” Như , currentThread trỏ đến tiến trình cha , mà trúng câu lệnh , tồn vùng nhớ tiến trình cha bị trỏ hết vào , khơng Để giải vấn đề , Exec , ta tạo new Thread x cho x>Fork(con trỏ đến hàm StartProcess (VoidFunctionPtr) , ID tiến trình – có (int)) Hàm Fork làm ?? Nó làm thứ sau  Cấp phát vùng nhớ Stack cho tiến trình Trong lúc cấp phát vùng nhớ Stack , Fork gán trỏ hàm VoidFunctionPtr , số nguyên int (số nguyên tham số hàm trỏ VoidFunctionPtr , bạn tùy biến trỏ trỏ đến kiểu liệu khác tùy bạn thiết kế hàm  ) vào ghi đặc biệt Chuyển tiến trình vào ReadyList  Vậy thân hàm Exec() , hàm StartProcess không thực thi , mà thực thi mà tiến trình điều phối nắm CPU để chạy Tức , Exec() , tạo Thread , trắng hoàn toàn , nằm ReadlyList , Thread nạp file noff vào nhớ khởi tạo ghi nắm quyền cầm CPU Sau , CPU hệ điều hành điều phối theo chế Round Robin , CPU cho tiến trình cha xài chút , hết lượt đến tiến trình xài chút lại quay sang cha tiến trình kết thúc tắt máy ln (Bởi quan tâm chạy đa chương thơi , chưa quan tâm đến vấn đề đồng hóa mà) 34  Vậy ta kết hợp hàm Fork StartProcess lại làm cho tiện ko ? Tôi không muốn Thread tạo iu q tơi phải đợi đến lúc nhận điều phối nạp vào nhớ khởi tạo ghi Tơi muốn điều làm hết hàm Exec …  Bạn nghiên cứu phần khởi tạo ghi AddressSpace  , việc làm thay đổi ghi máy MIPS ảo , dẫn đến tiến trình cha (currentThread) bị sụp đổ  , nhiên , có lẽ khả hạn hẹp , chưa thơng hết , có cách làm , bạn thử nghĩ xem  35 VIII - Lời kết câu hỏi Chà, đến bạn nắm khái niệm NachOS , tới 30% lận , phần cịn lại bạn vơ tư tìm hiểu Hãy suy nghĩ tiếp … quản lý hệ thống file , nhập xuất I/O , quản lý tiến trình , đồng hóa … Hãy nhớ điều , bạn nhà lập trình nhân hệ điều hành vĩ đại , bạn có quyền thay đổi thứ theo ý thích , ví dụ bạn nhận thấy class Thread cần phải có ID định danh cho tiến trình bạn thêm vào int ID chẳng hạn … Bạn cịn nhà sáng tạo phần mềm ứng dụng tuyệt vời , bạn sử dụng hàm system call NachOS để viết chương trình nhập xuất tạo file … , đồng hóa chương trình chạy đồng thời , thực toán đồng hóa kinh điển… Chỉ có điều , sáng tạo thay đổi thứ cách khôn ngoan  Sau trả lời số câu hỏi hay thắc mắc trình làm NachOS Vấn đề biến tồn cục: 1) Tơi tạo biến tồn cục ? - Bạn mở thread/system.h system.cc , bạn có thấy biến machine khai báo hủy khơng , làm theo ^_^ Vấn đề tạo class mới: 1) Tơi tạo class ? - Bạn tạo newclass.h newclass.cc , tùy vào ý nghĩa chúng mà bạn bỏ vào thư mục thích hợp , thread, userprog … - Trong newclass.h , bạn có sử dụng lớp khác bạn #include file h lớp vào Trong file cc bạn cần #include “newclass.h” “system.h” bạn có sử dụng đến biến tồn cục - Ở ,mình muốn lớp newclass sủ dụng mã nguồn thư mục userprog 36 - Mở tập tin Makefile.common (trong nachos-3.4/code) , cuối đoạn bắt đầu dòng USERPROG_H = thêm vào đường dẫn tương đối đến /…/newclass.h , ý , nhớ thêm \ cho dòng , dòng cuối khơng có \ - Cuối đoạn USERPROG_C = thêm tương tự đường dẫn tương đối đến newclass.cc - Cuối đoạn USERPROG_O = thêm vào newclass.o  Làm thể để biên dịch , GCC 3.x biên dịch file , sử dụng chúng thư mục userprog Vấn đề đa chương: 1) NachOS điều phối theo chế ? - NachOS sử dụng chế điều phối Round Robin với quantum số ngẫu nhiên có seed ~ -rs 1023 (hay số tùy bạn , -rs 200, -rs 100 …) Nó chọn tiến trình theo kiểu First In First Serve Vấn đề đồng : 1) Nếu tơi gọi system call, system call đó, tức KERNEL MODE, tơi bị lặp vơ hạn có máy quay USER MODE (giai đoạn nạp xử lý lệnh) lại không ? - Khơng  , bị lặp lặp hồi ln 2) Vậy Semaphore::P() tơi thấy có vịng lặp while lặp hồi mà , tiến trình Semaphore::P() mà bị ngủ ? - Vịng lặp while() Semaphore::P() khơng bị lặp vơ hạn đâu , tiến trình vào vịng lặp , hàm hợp ngữ SWITCH chuyển CPU qua cho tiến trình khác sử dụng , bạn thử Debug xem  [xem nachos studybook phần tiến trình] Và lưu ý , , bạn cần việc sử dụng P() V() , khơng cần quan tâm bên , hiểu chúng y lúc học lý thuyết ,tức gọi P() , ngủ CPU chuyển cho tiến trình khác ln , đánh thức dậy chạy tiếp khúc P() Nhớ quan tâm thêm vaule biến semaphore 3) Tôi thấy hàm Dow Up lý thuyết ngược với P() V() NachOS 37 - Xin mời bạn mở nachos_study_book coi , có ghi rõ , phương pháp hoàn toàn giống ý nghĩa ^_^ (Khỏi coi dc , biết thoy, coi hồi điên lun  ) Còn lại số câu hỏi khác , câu hỏi khác thấy hồn tồn tìm thấy câu trả lời thỏa đáng tài liệu tiếng Anh hay web , bạn ráng tìm ^ ^ GoodLuck !!! 38

Ngày đăng: 12/03/2021, 23:39

TỪ KHÓA LIÊN QUAN

w