【1】什麼是進程?編程
進程是一個正在運行的程序。安全
【2】pcb是什麼?有什麼做用?數據結構
pcb是進程控制塊,他包含了進程各類信息,是一個數據結構類型。系統能夠根據PCB來實現對進程的控制和管理,PCB是進程惟一的標誌。併發
【3】內存的分頁管理,頁表是什麼?在程序中咱們使用的是邏輯地址仍是物理地址?引入虛擬內存後對程序的執行有什麼影響?函數
頁表是爲了實現地址映射而實現的,能在內存中找到每一個頁面所對應的物理塊。邏輯地址。更安全,能夠加快電腦的運行速度測試
【4】在程序中malloc申請1G內存能不能成功?判斷依據是什麼?spa
能,由於內存中malloc申請的空間在堆上,對向上開闢,用戶空間最大爲3G,除去棧等等還有2G空間,徹底夠malloc1G內存大小。操作系統
在Linux上測試了一下,malloc1.9G==》成功 malloc2.0G==》失敗 malloc1.5G +malloc1.0G ==成功。當連續申請兩G時失敗,分兩次申請能夠成功。進程
【5】分時系統的特色,知道什麼是時間片?併發和並行的區別在哪?內存
分時系統具備多路性,交互性,獨佔性和及時性的特色。
多路性:宏觀上是多我的同時使用一個CPU,微觀上是多我的輪流在不一樣的時刻使用CPU
交互性:用戶根據系統響應結果進一步提出新的要求(用戶直接干預每一步)
獨佔性:用戶感受不到計算機爲其餘人服務,只能感受本身在是用整個系統
及時性:系統對用戶提出的請求及時響應
併發:每一個程序輪流佔用cpu去運行。並行:同時
【6】程序的狀態:就緒,運行,阻塞
【7】什麼是僵死進程?僵死進程產生的條件?如何避免僵死進程?
子進程結束,父進程沒有結束,父進程沒法獲得子進程的退出碼,子進程的文件描述符將一直存在,並且kill -9 沒法殺死該進程,因此子進程就成爲了僵死進程
1.父進程忽略SIGCLD信號;2.父進程捕捉SIGCLD信號,在信號處理函數中獲取子進程退出狀態。
【8】描述fork的複製流程,並描述寫時拷貝技術及如何實現?
fork--> 1.複製pcb。2.複製實體。(集體流程往後再說)
寫時拷貝技術:
在fork以後exec以前兩個進程用的是相同的物理空間(內存區),子進程的代碼段、數據段、堆棧都是指向父進程的物理空間,也就是說,二者的虛擬空間不一樣,但其對應的物理空間是同一個。當父子進程中有更改相應段的行爲發生時,再爲子進程相應的段分配物理空間,若是不是由於exec,內核會給子進程的數據段、堆棧段分配相應的物理空間(至此二者有各自的進程空間,互不影響),而代碼段繼續共享父進程的物理空間(二者的代碼徹底相同)。而若是是由於exec,因爲二者執行的代碼不一樣,子進程的代碼段也會分配單獨的物理空間。
【9】什麼是系統調用,他和庫函數的區別是什麼?執行系統調用後如何從用戶空間切換到內核空間?
在用戶態的時候將系統調用號存到寄存器中,經過中斷,切換到內核狀態,操做系統先將寄存器中的系統調用號讀取出來,而後經過系統調用表(sys_call_table)中去尋找相應的函數實現,而後將結果寫入寄存器中返回給用戶。
系統調用要經過中斷去執行內核中的相關函數,而庫函數則是直接給用戶去使用,不須要通過內核處理。
用戶態與內核態的切換經過中斷實現(80號中斷)。
【10】信號是什麼?信號在內核如何表示及實現?
信號的響應方式:signal() (改變信號的相應方式) 信號的發送方式:kill ( )
1.SIG_DFL 默認 SIGCHLD 子進程結束髮送給父進程
2.SIG_IGN 忽略 SIGINT 2 Ctrl + c
3.fun 自定義 15 :默認kill kill -9 不容許改變響應方式
信號的實現方式:一個long類型的長整型 32位
00100000 00000000 00000000 00000000
結構體:用來指向具體信號
32個元素
:
0 | SIG_DFL |
15 | |
16 | SIG_IGN |
32 | SIG_DFL |
【13】守護進程的編程流程?