面試常見問(wèn)題03 - 操作系統(tǒng)(施工ing)

目錄

  1. 堆內(nèi)存與棧內(nèi)存
  2. 進(jìn)程和線程
  3. 同步與異步
  4. 阻塞與非阻塞
  5. ...

1. 內(nèi)存區(qū)域

  • 區(qū)域劃分
1. 堆區(qū):由new分配的內(nèi)存塊,由程序員手動(dòng)分配和釋放,分配和釋放的過(guò)程中可能出現(xiàn)內(nèi)存泄漏,若
   程序員不釋放,程序結(jié)束時(shí)可能由操作系統(tǒng)回收
2. 棧區(qū):由操作系統(tǒng)自動(dòng)分配和釋放,無(wú)需程序員手動(dòng)操作
3. 全局區(qū)(靜態(tài)區(qū)):存放全局變量和靜態(tài)變量,程序開始時(shí)分配,結(jié)束時(shí)釋放
4. 常量區(qū):存放常量的區(qū)域,程序開始時(shí)分配,結(jié)束時(shí)釋放
5. 代碼區(qū):存放二進(jìn)制代碼的區(qū)域
內(nèi)存區(qū)域劃分
  • 堆區(qū)與棧區(qū)的區(qū)別
1. 管理方式:棧類似數(shù)據(jù)結(jié)構(gòu)中的棧,采用先進(jìn)后出的方式;堆則是鏈表
2. 碎片問(wèn)題:棧區(qū)是一段連續(xù)的內(nèi)存區(qū)域,不存在碎片問(wèn)題;堆區(qū)采用鏈表的方式,內(nèi)存區(qū)域不連續(xù),
   頻繁的分配和釋放會(huì)造成大量的碎片
3. 空間大?。?2位系統(tǒng)下,堆內(nèi)存可以達(dá)到4GB;棧最大不超過(guò)8MB,棧空間不足時(shí)提示棧溢出
4. 生長(zhǎng)方向:棧由高地址向低地址分配;堆由低地址向高地址分配
5. 分配方式:棧區(qū)內(nèi)存由系統(tǒng)自動(dòng)分配和釋放;堆區(qū)內(nèi)存由程序員手動(dòng)控制,分配時(shí)需要指明大小,容
   易造成內(nèi)存泄露,不過(guò)進(jìn)程結(jié)束時(shí)會(huì)由系統(tǒng)回收
6. 分配效率:棧由系統(tǒng)自動(dòng)分配,速度較快,程序員無(wú)法控制;堆是由new分配的內(nèi)存,一般速度較慢,
   使用方便

2. 進(jìn)程和線程

  • 關(guān)系
1. 一個(gè)進(jìn)程中至少含有一個(gè)線程(主線程)
1. 存在多線程時(shí),線程間相互共享進(jìn)程用戶地址空間(虛擬地址空間)
3. 進(jìn)程銷毀時(shí),進(jìn)程內(nèi)的所有線程都會(huì)被同時(shí)銷毀
  • 區(qū)別
1. 進(jìn)程是資源分配的最小單位,線程是程序執(zhí)行/資源調(diào)度的最小單位
2. 進(jìn)程有自己的獨(dú)立地址空間,每啟動(dòng)一個(gè)進(jìn)程系統(tǒng)都會(huì)為它分配地址空間,并建立數(shù)據(jù)表來(lái)維護(hù)代碼
   段、堆棧段和數(shù)據(jù)段;同一進(jìn)程中的多個(gè)線程共享代碼段,數(shù)據(jù)段(全局變量和靜態(tài)變量),擴(kuò)展段(堆
   存儲(chǔ))。但是每個(gè)線程擁有自己的棧段,用來(lái)存放所有局部變量和臨時(shí)變量。
3. 線程之間通信更方便,同一進(jìn)程的多個(gè)線程共享全局變量、靜態(tài)變量等數(shù)據(jù);進(jìn)程間的通信需要以通
   信的方式(IPC)進(jìn)行
4. 多進(jìn)程程序更健壯,多線程程序只要有線程死掉,整個(gè)進(jìn)程也會(huì)跟著死掉,而進(jìn)程之間則互不影響
  • 進(jìn)程間通信方式
1. 管道:半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系(父子關(guān)系)的進(jìn)程間使用
2. 命名管道:半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),允許無(wú)親緣關(guān)系進(jìn)程間的通信
3. 消息隊(duì)列:消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí),是 UNIX 下不同進(jìn)程之間可實(shí)現(xiàn)共
            享資源的一種機(jī)制,其中的消息具有特定的格式以及特定的優(yōu)先級(jí),獨(dú)立于發(fā)送與接收進(jìn)程
4. 信號(hào)量:用于實(shí)現(xiàn)進(jìn)程間的互斥與同步的計(jì)數(shù)器,而不是用于存儲(chǔ)進(jìn)程間通信數(shù)據(jù)
5. 共享內(nèi)存:映射一段能被其他進(jìn)程訪問(wèn)的內(nèi)存,共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問(wèn)
6. 套接字:可以讓不在同一臺(tái)計(jì)算機(jī)但通過(guò)網(wǎng)絡(luò)連接計(jì)算機(jī)上的進(jìn)程進(jìn)行通信

3. 同步與異步

  • 同步:在發(fā)出一個(gè)調(diào)用時(shí),在沒(méi)有得到結(jié)果之前,該調(diào)用就不返回,調(diào)用者主動(dòng)等待這個(gè)調(diào)用的結(jié)果
  • 異步:調(diào)用在發(fā)出之后,這個(gè)調(diào)用就直接返回了,所以沒(méi)有返回結(jié)果,被調(diào)用者通過(guò)狀態(tài)、通知來(lái)通知調(diào)用者,或通過(guò)回調(diào)函數(shù)處理這個(gè)調(diào)用

4. 阻塞與非阻塞

  • 阻塞:調(diào)用結(jié)果返回之前,當(dāng)前線程會(huì)被掛起。調(diào)用線程只有在得到結(jié)果之后才會(huì)返回
  • 非阻塞:在不能立刻得到結(jié)果之前,該調(diào)用不會(huì)阻塞當(dāng)前線程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容