Linux系统编程--1(进程和程序,CPU和MMU,PCB,进程状态)
進程相關概念
程序和進程
程序:是指編譯好的二進制文件,在磁盤上,不占用系統資源(cpu、內存、打開的文件、設備、鎖…)
 進程:是一個抽象的概念,與操作系統原理聯系緊密。進程是活躍的程序(程序員角度),占用系統資源,分配資源的基本單位(操作系統角度)。在內存中執行。(程 序運行起來,產生一個進程)
進程與程序的關系
程序就好像劇本,而進程呢就像一臺戲。
 同一個劇本可以在多個舞臺同時上演。同樣,同一個程序也可以加載為不同的進程(彼此之間互不影響)
并發
并發:在操作系統中,一個時間段中有多個進程都處于已啟動運行到運行完畢之間的狀態。但,任一個時刻點 上仍只有一個進程在運行。
 例如,當下,我們使用計算機時可以邊聽音樂邊聊天邊上網。 若籠統的將他們均看做一個進程的話,為什么 可以同時運行呢,因為并發。
單道程序設計
所有進程一個一個排對執行。若 A 阻塞,B 只能等待,即使 CPU 處于空閑狀態。而在人機交互時阻塞的出現時 必然的。所有這種模型在系統資源利用上及其不合理,在計算機發展歷史上存在不久,大部分便被淘汰了。
 就是一群人排隊,必須等前面人把事情處理完,前面人如果生病了或者突然有事走了,后面人不能辦事,必須等前面的人回來辦完才能輪到自己
多道程序設計
在計算機內存中同時存放幾道相互獨立的程序,它們在管理程序控制之下,相互穿插的運行。多道程序設計必 須有硬件基礎作為保證。
時鐘中斷
即為多道程序設計模型的理論基礎。 并發時,任意進程在執行期間都不希望放棄 cpu。因此系統需要 一種強制讓進程讓出 cpu 資源的手段。時鐘中斷有硬件基礎作為保障,對進程而言不可抗拒。 操作系統中的中斷
 處理函數,來負責調度程序執行。
分時復用
在多道程序設計模型中,多個進程輪流使用 CPU(分時復用 CPU 資源)。而當下常見 CPU 為納秒級,1 秒可以執 行大約 10 億條指令。由于人眼的反應速度是毫秒級,所以看似同時在運行。 1s=1000ms,1ms=1000us,1us=1000ns 1000000000
 實質上,并發是宏觀并行,微觀串行!
 
CPU和MMU
 硬盤存儲容量大,速度慢,磁盤把數據放到內存中,內存按理說可以直接把數據放到cpu中寄存器中去執行,但是為了提高效率,又在中間加了一個緩存Cache(緩沖區),通過Cache進入CPU
進到CPU中并不是整個程序,而是一條一條指令,以二進制形式處理,而從Cache進入CPU處理之前,要先經過預處理,編譯,匯編,鏈接把程序中的每一條指令變為二進制
預取器
從cache中把指令取出來,交給譯碼器譯碼
譯碼器
分析指令干什么,要用什么寄存器
算術邏輯單元(ALU)
執行+,<<運算,所有的運算都是通過+,<<模擬出來。計算完后,把數據給CPU中的寄存器堆。再給緩存
MMU
 兩個相同的程序,運行兩次,產生兩個進程,用戶塊映射的物理內存不一樣(因為進程彼此獨立),但內核塊映射的區域是一樣的,PCB(進程描述符)位于內核空間當中,但是兩個進程的PCB不一樣,位于同一塊物理內存里。
右邊是虛擬地址空間,在程序運行時產生,虛擬內存其實不存在,所有的數據實際是放在內存條中,所以存在一個對映的關系,一個1GB的實際內存,如何編寫出來4GB的虛擬內存?
虛擬地址,可用地址范圍有4GB
 例如:0x804a400 int a =10;//此時的地址是虛擬地址,它對應的實際地址是另外一個值
 MMU就是幫忙對應虛擬地址和實際地址,也就是映射
 另外一個問題,虛擬地址空間中,0~3GB是用戶可以使用的大小,而3~4GB是內核空間,內核可以訪問用戶的空間,但用戶訪問不了內核的,但是實際內存中,并沒有什么用戶和內核的劃分,所以需要有個東西來制定相應的訪問權限的問題。
 MMU設置修改內存訪問級別的問題
進程描述符PCB
-  進程 id。系統中每個進程有唯一的 id,在 C 語言中用 pid_t 類型表示,其實就是一個非負整數。 
-  進程的狀態,有就緒、運行、掛起、停止等狀態。 
-  進程切換時需要保存和恢復的一些 CPU 寄存器。 這里說一下,之前說過,CPU分時機制,可以在一個進程突然有事,不能運行的情況下,再運行其他程序,等這個程序可以運行時再再次運行,所以CPU寄存器中就保存了這個程序在離開時的狀態,等這個程序再次回來時恢復
-  描述虛擬地址空間的信息。 虛擬地址與物理地址的對應關系,MMU中使用一張表記錄改信息,這張表MMU維護,存儲在PCB中
-  描述控制終端的信息。 
-  當前工作目錄(CurrentWorkingDirectory)。 
-  umask 掩碼。 用來保護文件創建或者修改的權限 
-  文件描述符表,包含很多指向 file 結構體的指針。 
-  和信號相關的信息。 
-  用戶 id 和組 id。 
-  會話(Session)和進程組。 
-  進程可以使用的資源上限(ResourceLimit) 。 
進程狀態
進程狀態保存在PCB, 進程基本的狀態有 5 種。分別為初始態,就緒態,運行態,掛起態與終止態。其中初始態為進程準備階段,常 與就緒態結合來看。
 
總結
以上是生活随笔為你收集整理的Linux系统编程--1(进程和程序,CPU和MMU,PCB,进程状态)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: x95j面板是10bit吗
- 下一篇: 成都大熊猫繁育基地需要玩多长时间
