操作系统面试题暂存
源地址:https://blog.csdn.net/zhou753099943/article/details/51771220 1、進程和線程的區別? 解析:(1)進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元 (2)同一個進程中可以包括多個線程,并且線程共享整個進程的資源(寄存器、堆棧、上下文),一個進行至少包括一個線程。 (3)進程的創建調用fork或者vfork,而線程的創建調用pthread_create,進程結束后它擁有的所有線程都將銷毀,而線程的結束不會影響同個進程中的其他線程的結束 (4)線程是輕兩級的進程,它的創建和銷毀所需要的時間比進程小很多,所有操作系統中的執行功能都是創建線程去完成的 (5)線程中執行時一般都要進行同步和互斥,因為他們共享同一進程的所有資源 (6)線程有自己的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有自己的私有屬性進程控制塊PCB,這些私有屬性是不被共享的,用來標示一個進程或一個線程的標志 2、死鎖?死鎖產生的原因?死鎖的必要條件?怎么處理死鎖? 解析:(--)相互等待資源而產生的一種僵持狀態,如果沒有外力的干預將一直持續這個狀態 (--)系統資源不足、相互競爭資源、請求資源順序不當 (2)互斥、不可搶占、循環等待、請求與保持 (3)因為互斥是不可改變的,所以只能破壞其他三個條件中的一個來解除死鎖,方法:剝奪資源、殺死其中一個線程 3、Windows內存管理方式:段存儲、頁存儲、段頁存儲 解析: 4、進程的幾種狀態? 解析:(1)run(運行狀態):正在運行的進程或在等待隊列中對待的進程,等待的進程只要以得到cpu就可以運行 (2)Sleep(可中斷休眠狀態):相當于阻塞或在等待的狀態 (3)D(不可中斷休眠狀態):在磁盤上的進程 (4)T(停止狀態):這中狀態無法直觀的看見,因為是進程停止后就釋放了資源,所以不會留在linux中 (5)Z(僵尸狀態):子進程先與父進程結束,但父進程沒有調用wait或waitpid來回收子進程的資源,所以子進程就成了僵尸進程,如果父進程結束后任然沒有回收子進程的資源,那么1號進程將回收 5、IPC通信方式? 解析:(1)管道(匿名管道(pipe親緣關系的進程通信)、命名管道(mkfifo/mknod)) (2)消息隊列:是基于消息的、用無親緣關系的進程間通信,主要函數:msgget、msgsend、msgrecv、msgctl (3)信號量:相當于一把互斥鎖,通過p、v操作,主要函數:semget、semop、semctl (4)共享內存:是進程間通信速度最快的,所以用經常是集合信號量或互斥鎖來實現同步,shmget、shmat、shmdt、shmctl 6、什么是虛擬內存? 解析:是將進程部分裝入內存中,從而能實現一個很大的程序能在一個比它小的內存中運行,它的主要實現是靠程序的換進換出來實現的,因為內存中0~3G是用戶使用,3~4G才是內存使用,通過映射來實現來進行邏輯地址到物理地址的映射 7、虛擬地址、邏輯地址、線性地址、物理地址的區別? 解析:?分段機制把一個邏輯地址轉換為線性地址;接著,分頁機制把一個線性地址轉換為物理地址。 (1)虛擬地址:虛擬內存映射出來的地址 (2)邏輯地址:程序的段加偏移量形成的,C/C++程序中取地址求出來的地址就是邏輯地址 (3)線性地址:是邏輯地址到物理地址的中間層,只有啟動分頁機制的時候才有線性地址,如果沒有分頁機制,那么線性地址就是物理地址 (4)物理地址:是內存中實實在在存在的硬件地址, 邏輯地址(啟動分段)--》線性地址(啟動分頁)--》物理地址
轉載于:https://www.cnblogs.com/elpsycongroo/p/8967560.html
總結
- 上一篇: Java面向对象之USB接口实例
- 下一篇: C# .NET 根据Url链接保存Ima