[置頂] 進程和線程的區別
來源:程序員人生 發布時間:2016-09-12 15:43:43 閱讀次數:2651次
1、進程和線程的區分?
解析:(1)進程是資源的分配和調度的1個獨立單元,而線程是CPU調度的基本單元
(2)同1個進程中可以包括多個線程,并且線程同享全部進程的資源(寄存器、堆棧、上下文),1個進行最少包括1個線程。
(3)進程的創建調用fork或vfork,而線程的創建調用pthread_create,進程結束后它具有的所有線程都將燒毀,而線程的結束不會影響同個進程中的其他線程的結束
(4)線程是輕兩級的進程,它的創建和燒毀所需要的時間比進程小很多,所有操作系統中的履行功能都是創建線程去完成的
(5)線程中履行時1般都要進行同步和互斥,由于他們同享同1進程的所有資源
(6)線程有自己的私有屬性TCB,線程id,寄存器、硬件上下文,而進程也有自己的私有屬性進程控制塊PCB,這些私有屬性是不被同享的,用來標示1個進程或1個線程的標志
2、死鎖?死鎖產生的緣由?死鎖的必要條件?怎樣處理死鎖?
解析:(--)相互等待資源而產生的1種僵持狀態,如果沒有外力的干預將1直延續這個狀態
(--)系統資源不足、相互競爭資源、要求資源順序不當
(2)互斥、不可搶占、循環等待、要求與保持
(3)由于互斥是不可改變的,所以只能破壞其他3個條件中的1個來消除死鎖,方法:剝奪資源、殺死其中1個線程
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)信號量:相當于1把互斥鎖,通過p、v操作,主要函數:semget、semop、semctl
(4)同享內存:是進程間通訊速度最快的,所以用常常是集合信號量或互斥鎖來實現同步,shmget、shmat、shmdt、shmctl
6、甚么是虛擬內存?
解析:是將進程部份裝入內存中,從而能實現1個很大的程序能在1個比它小的內存中運行,它的主要實現是靠程序的換進換出來實現的,由于內存中0~3G是用戶使用,3~4G才是內存使用,通過映照來實現來進行邏輯地址到物理地址的映照
7、虛擬地址、邏輯地址、線性地址、物理地址的區分?
解析: 分段機制把1個邏輯地址轉換為線性地址;接著,分頁機制把1個線性地址轉換為物理地址。
(1)虛擬地址:虛擬內存映照出來的地址
(2)邏輯地址:程序的段加偏移量構成的,C/C++程序中取地址求出來的地址就是邏輯地址
(3)線性地址:是邏輯地址到物理地址的中間層,只有啟動分頁機制的時候才有線性地址,如果沒有分頁機制,那末線性地址就是物理地址
(4)物理地址:是內存中實實在在存在的硬件地址,
邏輯地址(啟動分段)--》線性地址(啟動分頁)--》物理地址
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈