目錄
一. 操作系統
1. 操作系統的概念
2. 操作系統的功能
二. 進程
1. 進程的概念
2. 進程在系統中的管理
3. PBC
(1)pid
(2)內存指針
(3)文件標識符
4. 資源分配
5. 進程的調度
(1)狀態
(2)優先級
(3)記賬信息
(4)上下文
6. 進程的通信
一. 操作系統
1. 操作系統的概念
操作系統是計算機系統的核心軟件,負責管理計算機的硬件和軟件資源,并為用戶和應用程序提供統一的接口。?
常見的操作系統:Windows,macOS,Linux,Android,iOS,鴻蒙
注意:操作系統是一個軟件?
2. 操作系統的功能
1. 管理各種硬件設備(向下,管理各種硬件設備)
2.?給軟件提供穩定的運行環境(向上,向上層提供方便易用的服務)
3.?操作系統是系統資源的管理者
一個電腦由硬件組成,比如鼠標,鍵盤等
市面上,每一種硬件有很多廠商在生產,不同廠商生產的硬件會存在差異,
即使是同一個廠商,型號不同,也會存在差異,
意味著:每一個硬件就會對應一個程序,這樣很不利于市場的發展,
這時候操作系統就會提出統一的API,軟件來實現API,達到管理這些種硬件設備的功能操作系統會提供一些管理軟件資源的API常見的管理:文件管理,存儲器管理,設備管理,處理器管理
二. 進程
1. 進程的概念
進程是操作系統提供的一種軟件資源
多任務操作系統(同一時刻,可以執行多個任務)
單任務操作系統(同一時刻,可以執行一個任務)
進程的組成部分:程序代碼,數據和PCB(進程控制塊)組成
在任務管理器中,正在運行的程序或者正在執行的任務都可以被稱為進程,進程是動態的
注意:進程和程序的區別??
- 程序是靜態的,進程是動態的
一個可執行文件(程序),當我們雙擊運行的時候,操作系統就會把這個可執行文件中的關鍵信息(小部分)加載到內存中,并且開始運行里面的代碼,就形成了一個進程.?
2. 進程在系統中的管理
操作系統,一般使用C/C++實現,沒有java實現的
- 一般使用結構體的方式來描述進程的信息—PCB(進程控制塊)
- 再使用一些數據結構(鏈表等)將這些結構體,串在一起? ? ? ? ? ?
可以粗劣認為:
- 運行一個新的程序,系統上就會多出一個進程,也意味著會多出一個新的結構體(PCB),并且添加在鏈表上?
- 結束一個程序,就意味著將鏈表中對應進程的PCB刪除并銷毀
- 當在運行管理器中,看到這些任務在運行的時候,就說明在遍歷鏈表并打印每個節點的信息
也就意味著,有一些特殊的程序(在內核中執行),如果出現問題,可能會導致系統故障(卡死或者藍屏)?,但是大部分,不會導致崩潰,最多是會拋出一些異常
3. PBC
本質上是一個結構體
結構體內包含了進程的核心信息(以為很少嗎?并不,事實上可能會有上百個)
(1)pid
作用:進程的身份表示(進行區分)
在同一個機器上,某一個時刻,每個進程pid都是唯一的
在針對進程的操作中,經常使用pid作為參數
(2)內存指針
作用:描述進程使用內存資源的情況
- 進程只能使用申請到的資源
- 進程在運行的時候,必須將指令和數據都加載到內存中
內存指針就詳細說明進程可以使用那些資源,并且知道那些地址存放的指令,那些地址存放的數據
注意:肯定是先將指令和數據傳入內存中,再創建和運行進程?
(3)文件標識符
作用:說明了這個進程在運行的時候,會涉及到的外存相關資源
文件:對外存的一種抽象,無論是硬盤,軟盤,U盤,都叫“文件”
一個進程想要操作文件,那么結構體內的文件標識符,會記錄這個文件的相關信息
4. 資源分配
進程是系統分配資源的基本單位
- 內存和硬盤的資源分配問題,在PCB中詳細體現
- cpu中同樣會出現資源分配的情況(一塊cpu可能會有一個核心或者多個核心)
同一時刻,一個核心只能運行一個進程
但是電腦上的進程往往不止幾個,而是上百個甚至更多,要如何解決這個問題?
于是出現了分時復用(并發)的概念:因為cpu運行的速度很快,讓這些進程輪流進入cpu運行
?在人眼看來,這些進程就是“同時執行”
注意:多核cpu的特點
假如只有4個進程,4核cpu并不是通過進程快速切換的方式實現的并行,而是真正的同時執行(并發)
但是,現在的計算機都是并行加并發 ,具體如何,還是看系統的調度
5. 進程的調度
PCB 中還提供一些屬性, 來支持系統對進程的調度
(1)狀態
- 就緒狀態:進程已經準備好,等待CPU調度。
- 運行狀態:進程正在CPU上運行。
- 阻塞狀態:進程因為某些原因暫時無法運行,需要等待某個事件的發生。
(2)優先級
在多個進程需要調動的時候,會根據優先級從而選擇調動誰,
優先級的排序會根據優先級算法得出
比如:在打王者和qq,這個時候王者的優先級肯定比qq高
(3)記賬信息
會根據每個進程占用cpu多少時間,進行一個統計,然后根據統計結果,調整調度的策略
比如,一個進程很長時間都沒有進入cpu,那么就會適當的提高這個進程的優先級
(4)上下文
支撐進程調度的重要屬性,類似于游戲的存檔和讀檔
- cpu內有一些寄存器,專門存放信息
- 進程調度出 CPU 之前,把關鍵寄存器中的這些數據,保存到內存中。
- 在該進程下次再去 CPU 上執行的時候,把數據從內存中加載到cpu的對應寄存器上。
6. 進程的通信
每個進程的內存,都是相互獨立的,彼此互不干擾
進程A不能訪問進程B,對應進程B也不能訪問進程A,這種稱為“進程獨立性”
好處:如果這個進程出現了問題,只會影響當前進程,不會導致所有的進程崩潰
比如:在打王者的時候,qq突然有人給你發了個神秘信息,導致你手機崩潰了,那確實很讓人惱
?注意:
進程的通信和進程的獨立性,并不沖突,系統會提供一些公共的空間來交互數據
常見的幾種通信方式:管道,文件,網絡,信號等
其中,最常用的是網絡,網絡可以實現一個主機的不同進程,也支持不同主機的不同進程
?點贊的寶子今晚自動觸發「躺贏錦鯉」buff!