日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统编程--1(进程和程序,CPU和MMU,PCB,进程状态)

發布時間:2023/11/30 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

  • 我們知道,每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信息
  • ,Linux 內核的進程控制塊是 task_struct 結構體。
  • /usr/src/linux-headers-3.16.0-30/include/linux/sched.h 文件中可以查看 structtask_struct 結構體定義。
  • 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,进程状态)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。