第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

1. 前言

從宏觀的角度來看,操作系統(tǒng)就是我們?nèi)粘J褂玫?Windows、MacOS、Linux 這類的系統(tǒng),但是這種直觀的用戶交互界面只是操作系統(tǒng)的一小部分功能,操作系統(tǒng)如何決定系統(tǒng)的資源調(diào)度、如何處理內(nèi)存的分配以及如何管理網(wǎng)絡(luò)和文件系統(tǒng),這些都是隱藏在用戶界面之下的內(nèi)容。

從課程設(shè)計的角度來看,操作系統(tǒng)(Operating System)是計算機(jī)專業(yè)的核心專業(yè)課程,所以可以用來衡量候選人的計算機(jī)基本功。

對于后端程序員,如果是使用 Java 語言,Java 中的多線程會涉及到進(jìn)程和線程的關(guān)系,這是操作系統(tǒng)中的概念。如果使用 C++ 語言,那么無法避免內(nèi)存分配和管理,這也是操作系統(tǒng)中的基礎(chǔ)概念,因此操作系統(tǒng)是校招面試中的核心之一。

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

面試官提問: 操作系統(tǒng)中的進(jìn)程和線程有什么區(qū)別?

題目解析:

進(jìn)程和線程的區(qū)別是操作系統(tǒng)面試相關(guān)的出現(xiàn)頻率最高的題目,沒有之一。

在闡述進(jìn)程和線程的定義之前,最好能夠想清楚在操作系統(tǒng)中為什么會出現(xiàn)進(jìn)程這個概念。

2.1 進(jìn)程的產(chǎn)生背景

我們希望操作系統(tǒng)能夠同時處理多個任務(wù),例如在播放網(wǎng)易云音樂的同時,也能在微信上聊天。計算機(jī)的核心處理硬件是 CPU,如果計算機(jī)只有一個 CPU,那么播放音樂和處理聊天軟件都需要這個 CPU 去執(zhí)行運(yùn)算邏輯,那如何做到時間上的同時處理?答案是 CPU 在多個邏輯任務(wù)之間來回切換,因為切換速度太快,所以看起來做到了并發(fā)執(zhí)行。

傳統(tǒng)操作系統(tǒng)的任務(wù)調(diào)度采用時間片輪轉(zhuǎn)的方式,在執(zhí)行一個任務(wù)達(dá)到時間限制時會暫停處理,然后切換到處理下一個任務(wù)。每一個任務(wù)執(zhí)行的時間間隔就是一個時間片,被執(zhí)行的任務(wù)處于運(yùn)行狀態(tài),被暫停的任務(wù)處于就緒狀態(tài),如圖所示:

圖片描述

假設(shè)存在兩個調(diào)度任務(wù),CPU 調(diào)度產(chǎn)生并發(fā)的 "錯覺"

2.2 進(jìn)程和線程的區(qū)別

首先給出進(jìn)程和線程的基本定義:

  • 進(jìn)程(Process) :是操作系統(tǒng)任務(wù)調(diào)度的基本單元, 目的是為了實現(xiàn)操作系統(tǒng)的并發(fā)。
  • 線程(Thread) :線程是進(jìn)程的子任務(wù),是進(jìn)程中實際運(yùn)行的任務(wù),線程是程序執(zhí)行的最小單元。

然后分析兩者之間的主要區(qū)別:

(1)包含關(guān)系:一個線程肯定歸屬于一個進(jìn)程,但是一個進(jìn)程可以包含多個線程。
(2)內(nèi)存管理:操作系統(tǒng)會給進(jìn)程分配獨(dú)立的內(nèi)存空間,但是一個進(jìn)程下的多個線程共享內(nèi)存空間。以 Java 編程為例,同一個 main 函數(shù)進(jìn)程下的多個線程共享代碼段(代碼和常量),以及數(shù)據(jù)段(全局變量和靜態(tài)變量),這些都是共享的內(nèi)存空間,不過需要注意,每個線程會有獨(dú)立的運(yùn)行??臻g。
(3)單元定義:從內(nèi)存分配的角度就能看出,進(jìn)程是資源分配的最小單元,線程是 CPU 執(zhí)行的最小單元。
(4)系統(tǒng)開銷:創(chuàng)建進(jìn)程和線程的系統(tǒng)開銷是不同的,因為在創(chuàng)建和銷毀進(jìn)程時,操作系統(tǒng)需要分配和回收內(nèi)存資源,創(chuàng)建線程不需要切換整體內(nèi)存空間,所以創(chuàng)建進(jìn)程的系統(tǒng)開銷遠(yuǎn)大于創(chuàng)建線程;在切換進(jìn)程時需要保存 CPU 運(yùn)行的上下文,切換線程只需要切換 CPU 中少數(shù)寄存器的內(nèi)容,所以切換進(jìn)程的系統(tǒng)開銷也遠(yuǎn)大于切換線程。
(5)穩(wěn)定性分析:因為不會共用內(nèi)存空間,所以一個進(jìn)程掛了對另外的進(jìn)程影響很小,但是同一進(jìn)程下的線程是共享內(nèi)存的,所以一個線程掛了,會影響到其他線程。
(6)通信:因為不同進(jìn)程處于不同的內(nèi)存空間,所以通信方式比較麻煩,具體方式將在之后的小節(jié)介紹。同一進(jìn)程下的線程之間通信方式相對簡單,因為共享內(nèi)存,可以讀寫相同的內(nèi)存空間。

3. 小結(jié)

本章節(jié)介紹了操作系統(tǒng)中進(jìn)程的起源原因,以及從操作系統(tǒng)內(nèi)存管理的角度分析了進(jìn)程和線程之間的區(qū)別。