程序员不得不学的操作系统知识(一)
計算機硬件
計算機的重要組成部分,包含了 5 個重要的組成部分:運算器、控制器、存儲器、輸入設備、輸出設備。
-
運算器:運算器最主要的功能是對數據和信息進行加工和運算。它是計算機中執行算數和各種邏輯運算的部件。運算器的基本運算包括加、減、乘、除、移位等操作,這些是由?算術邏輯單元(ALU)?實現的。而運算器主要由算數邏輯單元和寄存器構成。
-
控制器:指按照指定順序改變主電路或控制電路的部件,它主要起到了控制命令執行的作用,完成協調和指揮整個計算機系統的操作。控制器是由程序計數器、指令寄存器、解碼譯碼器等構成。
運算器和控制器共同組成了 CPU
-
存儲器:存儲器就是計算機的記憶設備,可以保存信息。存儲器分為兩種,一種是主存,也就是內存,它是 CPU 主要交互對象,還有一種是外存,比如硬盤軟盤等。
-
輸入設備:輸入設備是給計算機獲取外部信息的設備,它主要包括鍵盤和鼠標。
-
輸出設備:輸出設備是給用戶呈現根據輸入設備獲取的信息經過一系列的計算后得到顯示的設備,它主要包括顯示器、打印機等。
-
I/O 設備:Input/Output 設備是系統和外部世界的連接。
-
總線:貫穿整個系統的一組電子管道,通常被設計成用來傳送定長的字節塊,也就是字。字的大小與系統相關,比如在32位操作系統當中,一個字是4個字節。
-
主存:主存是一個臨時存儲設備,而不是永久性存儲,磁盤是?永久性存儲?的設備。主存既保存程序,又保存處理器執行流程所處理的數據。從物理組成上說,主存是由一系列動態隨機存儲構成的集合。
-
CPU:由**用于保存變量和臨時結果的寄存器、程序計數器(下一條要執行的指令地址)、堆棧指針、PSW程序狀態字寄存器(IO和系統調用常用到)**等寄存器組成。CPU 在指令的要求下會做如下操作:
加載:把一個字節或者一個字從主存復制到寄存器,以覆蓋寄存器原來的內容
存儲:把一個字節或者一個字從寄存器復制到主存的某個位置,以覆蓋這個位置上原來的內容
操作:把兩個寄存器的內容復制到 ALU,ALU 對這兩個字做算術操作,并把結果存放到一個寄存器中,以覆蓋寄存器原來的內容
跳轉:從指令本身中抽取一個字,并將這個字復制到程序計數器(PC)中,以覆蓋PC中原來的內容。
計算機概念
計算機是由軟件與硬件組成的,而硬件又包括了總線、I/O設備、主存以及處理器,其中信息是由位以及上下文表示的,而信息則是從I/O設備以位的形式通過總線進入主存,然后由處理器從主存將信息取出處理。
字與字長
指令集結構描述的是每條機器代碼指令的效果,而微體系結構描述的是處理器實際上是如何實現的。
計算機一次處理的數據長度稱為字,一個字通常由一個或多個字節構成,字的位數叫做字長。由于虛擬地址空間中的地址就是使用一個字來編碼的,因此字長決定了系統的虛擬地址空間的最大大小。字長指的是CPU一次能并行處理的二進制位數。
對于跨越多個字節的程序對象來說,有兩個問題:
-
這個對象的地址是什么?
-
在存儲器中如何排列這些字節?
對象的地址:在幾乎所有的機器上,多字節對象都被存儲為連續的字節序列,對象的地址為所使用字節中最小的地址。
排列方式:
-
小端法:按照從最低有效字節到最高有效字節的順序存儲對象,也就是最低有效字節在最前面。
-
大端法:和小端法相反。是按照從最高有效字節到最低有效字節的順序存儲對象,也就是最高有效字節在最前面。
程序的運行
程序的編譯:
預處理器、編譯器、匯編器和鏈接器一起構成了編譯系統。
-
預處理階段:預處理器 cpp 根據以字符 # 開頭的命令,修改原始的 C 程序,處理頭文件使得引用代碼插入源代碼中,得到以 .i 作為文件擴展名的源程序。
-
編譯階段:編譯器 ccl 將文本文件 hello.i 翻譯成文本文件 hello.s,它包含一個匯編語言程序,匯編語言程序中的每條語句都以一種標準的文本格式確切的描述一條低級機器語言指令。匯編語言能為不同高級語言的不同編譯器提供通用的輸出語言。
-
匯編階段:匯編器 as 將hello.s 翻譯成機器語言指令,把這些指令打包成一種叫做可重定位目標程序的格式,并將結果保存在字節編碼為機器碼的hello.o 中。
-
鏈接階段:鏈接器 ld 就是負責處理相關調用,將相關調用的機器碼合并到源文件中,結果就得到一個 hello 文件,它是一個可執行目標程序,可以被加載到內存中,由系統運行。
計算機組成預覽:
一個程序的執行,是經歷了預處理器、編譯器、匯編器以及鏈接器的處理之后,才最終成為可執行的文件。
操作系統概念
概念
**操作系統是管理硬件和軟件的一種應用程序。**是管理計算機硬件與軟件資源的系統軟件,同時也是計算機系統的內核與基石。計算機有兩種運行模式:內核態(管態和核心態)和用戶態。操作系統提供了幾種抽象模型:
-
文件:對 I/O 設備的抽象
-
虛擬內存:對程序存儲器的抽象
-
進程:對一個正在運行程序的抽象
-
虛擬機:對整個操作系統的抽象
主要功能
-
處理器管理:進行相關的任務調度,解決處理其調度、分配、回收等。
-
存儲器管理:負責管理內存的分配、回收,在進程需要時分配內存以及完成時回收內存,協調內存資源。
-
設備管理:根據確定的設備分配原則對設備進行分配,使設備與主機能夠并行工作。
-
文件管理:有效地管理文件的存儲空間,合理地組織和管理文件系統,為文件訪問和文件保護提供更有效的方法及手段。
-
提供用戶接口:提供了訪問應用程序和硬件的接口,方便用戶使用。
操作系統特性
操作系統還具有四個重要特性:并發性、共享性、虛擬性、異步性。
并發性
-
并行是指兩個或多個事件可以在同一時刻發生
-
并發是指兩個或多個事件可以在同一時間間隔刻發生
共享性
-
共享性表現為操作系統中的資源可供多個并發的程序共同使用
-
互斥共享:資源互斥訪問
-
同時訪問:某一個資源在一段時間內并發地被多個程序訪問,這種“同時”是宏觀的
虛擬性
虛擬性表現為把一個物理實體轉變為若干個邏輯實體。
-
時空復用技術:在時間上復用,程序并發使用。
-
物理設備虛擬為多個邏輯設備
-
每個程序占用一個邏輯設備
-
多個程序通過邏輯設備并發訪問
-
借助多道程序的技術
-
為每道程序建立進程
-
多個程序分時復用處理器
-
虛擬處理器技術:
-
虛擬設備技術:
-
空分復用技術:實現虛擬磁盤、虛擬內存,提高資源利用率和編程效率。
-
在邏輯上擴大了程序的存儲容量,程序可以使用比實際內存大的空間(暫不需要的程序部分掛起在磁盤)
-
將物理磁盤虛擬為多個邏輯磁盤
-
虛擬磁盤技術:
-
虛擬內存技術:
異步性
進程是以不可預知的速度向前推進的,不知道程序何時執行、何時暫停、何時完成,這么多的不可預知的事情,就導致了程序的異步性。
局部性原理
局部性原理指的是CPU訪問存儲器時,無論是存取指令還是存取數據,所訪問的存儲單元都趨于聚集在一個較小的連續區域中。這個原理也是使得虛擬內存技術可以實現的一個原因
因為有局部性原理
-
所以計算機在加載程序時,無需全部邏輯空間裝入內存,裝載部分即可(需要使用的部分)
-
如果發現所使用的內存不在物理內存中,則發出缺頁中斷,發起頁面置換,把保存在輔存中的頁面置換到物理內存中,這樣程序又可以繼續運行下去了
-
從用戶層面看,程序擁有很大的空間,既是虛擬內存
虛擬內存實際上是對物理內存的擴充,速度接近于內存,成本接近于輔存
了解更多文章,🙋?♂?關注公眾號:學編程的文若
總結
以上是生活随笔為你收集整理的程序员不得不学的操作系统知识(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学海无涯路【第01回】初始P
- 下一篇: 比特率 Kbps kbit/s 1K