linux作業系統執行學習總結

2022-06-12 19:45:10 字數 1812 閱讀 4877

作業系統學習總結

1、linux上面cpu通過上下文切換達到程序的不斷切換,通過動態計算切換執行的時長叫時間片。

2、作業系統系統程序分為核心態和使用者態程序

3、作業系統為了具備最高許可權讓使用者程序不具備最高許可權,cpu中提供了psw的暫存器中儲存了程序有關的控制器,其中分兩種執行模式:核心模式和使用者模式

4、中斷用於打斷cpu正常執行的流程,同時能保證cpu控制權交給作業系統。中斷分為硬體中斷和軟體中斷

5、系統呼叫:

發起系統呼叫,請求作業系統幫忙執行某些操作,這會產生軟中斷;

軟中斷導致陷入核心,cpu控制權交給作業系統,作業系統處理中斷,即執行被請求的操作;

如果一切正常,作業系統在完成操作後會恢復到斷點處繼續向下執行,這會回到使用者態;

使用者程序取得作業系統操作的成果,繼續向下執行。

6、cpu在空閒後執行作業系統上面的idle的程序,該程序主要計算cpu的空閒時間

7、作業系統通過在物理記憶體上面分配乙個位址空間來實現程序記憶體管理

管道:管道是程序間通訊方式。沒建立乙個管道,就有兩個檔案描述符,乙個是負責讀管道的,乙個是負責寫管道的。使用管道通訊時,就是兩個檔案描述符加一段核心空間中的記憶體

管道分為匿名管道和命名管道

訊號量:

1、如果乙個程序操作p操作(減1操作,即請求乙個訊號燈),如果減去之後訊號量的數值為負數,則該程序被阻塞,如果減去之後為0或正數,則放行該程序

2、如果乙個程序請求v操作(加1操作,即釋放或增加乙個訊號燈),程序直接放行

3、如果請求v操作,如果加1之後仍為0或負數,則方向該程序的同時還喚醒另乙個被阻塞的程序。如果加1後為正數,則直接新增乙個訊號等資源

總結:最簡單的訊號量當然是初始時只適用1個訊號燈,從而實現互訴鎖(也成為互訴量)機制:p是申請鎖操作,只有在有值為1的時候才能申請鎖,否則被阻塞;v是釋放鎖,一直被放行

鎖1、髒讀:將快取中修改後但沒有儲存的資料稱為髒資料

2、更新丟失:同時修改資料時,有乙個程序的更新被覆蓋了,也就是丟失了

一般鎖分為兩類:共享鎖和互訴鎖。共享鎖也稱為讀鎖,通常使用s字母表示;互訴鎖也成為排他鎖或寫鎖,通常使用x字母表示。

s xs yes no

x no no

下面是相容性介紹:

1、當多個程序都只是讀取同乙份資源(即都申請s鎖),因為沒有修改資料,所以可以允許他們同時讀取,所以s鎖是可以共存的

2、如果有乙個程序修改資料,它將申請x鎖,這時顯然不能讓其他程序讀取或寫入資料,所以x鎖與s鎖、x鎖和x鎖都是互訴的

3、如果乙個程序正在讀取資料(即已申請s鎖),其它程序想修改資料,也是不允許的,所以s鎖和x鎖是互訴的

程式如何變成程序

os要讓磁碟上乙個可執行格式(不是可執行許可權)程式執行起來,第一件事是裝載(load)程式的相關**以及靜態資料(例如已初始化的變數)到記憶體中(具體的是到自己的虛擬位址空間,虛擬位址空間後面介紹)

在unix系統中,設定好每個程序都關聯的3個檔案描述符:stdout、stdin、stderr),

程式都是由main()函式作為入口,然後os將cpu控制權交給新建立的程序,程序獲取到cpu後就可以執行了

程序表和程序資料結構

核心負責管理維護所有程序,核心在核心空間維護乙個程序的資料結構,這個資料結構中記錄了所有程序,每個程序在資料結構中都成為乙個程序表項

程序表中除了記錄了所有程序的pid,還使用乙個字段記錄了所有程序的指標,指向每個程序的程序控制塊

在linux中程序就是乙個task_struct資料結構,所以pcb代表的就是task_struct(乙個程序)

pcb包含了程序非常重要的資訊,是上下文切換的關鍵,它儲存在每個程序的核心棧中(使用者棧和核心棧)

作業系統 linux學習總結

1.自我購買的網上課程 1.基本操作 r cat,more,head,tail,ls w vim,echo,touch,rm,mv,cp x cd,find,whereis,grep,ln s 2.管理 許可權 r w x 4 2 1 777,chmod,chown,chgrp 使用者 userad...

Linux作業系統學習筆記(二)核心執行

上文中,我們分析了從按下電源鍵到bootloader完成載入的過程。載入完成之後,就要正式啟動linux核心了,而在這之前首先要完成從實模式到保護模式的切換。本文主要分析以下幾部分內容 其實整個過程中還有很多內容,比如檢查各種硬體裝置等,在此略過不提。下面就開始潛入linux原始碼的海洋暢遊啦。在實...

Linux 作業系統學習

boot loader主要功能 kernel boot loader 載入kernel,和initrd.img 到記憶體中。kernel 啟動後自動解壓,將initrd.img的內容掛載為init 根檔案系統。kernel 從init根檔案系統中載入所需的功能模組。kernel 會根據grub.cf...