程序的理論基礎

2022-08-05 11:48:08 字數 2041 閱讀 4330

作業系統介於計算機硬體和軟體之間,本質也是一個軟體,用來協調,管理和控制計算機和軟體的控制大軟體,由作業系統的核心以及系統呼叫兩部分組成,所處的位置如下:

作用:

隱藏醜陋複雜的硬體介面,提供良好的抽象介面

管理,排程程序,將多個程序變得有序

多道技術:

產生背景:針對單核,實現併發

空間上的複用:記憶體中同時又多道程式

時間上的複用:複用一個cpu的時間片

強調:遇到io切,佔用cpu時間過長也切,核心在於切之前將程序的狀態儲存下來,這樣才能保證下次切換回來時,能基於上次且走的位置繼續執行

1. 由硬體保護,不能被使用者修改

2. 作業系統是一個大型,複雜,長壽的軟體

定義:正在進行的一個過程或任務,負責執行任務的是cpu

程序與程式的區別:

程式僅只是一堆**,程序指的是程式執行過程

併發偽並行,即同時執行,單個cpu + 多道技術就可以實現併發(並行也屬於併發),我理解併發類似於物理上的串聯,但也有所不同

你是一個cpu,你同時談了三個女朋友,每一個都可以是一個戀愛任務,你被這三個任務共享

要玩出併發戀愛的效果,

應該是你先跟女友1去看電影,看了一會說:不好,我要拉肚子,然後跑去跟第二個女友吃飯,吃了一會說:那啥,我

去趟洗手間,然後跑去跟女友3開了個房

併發舉例

並行同時執行,只有具備多個cpu才能實現並行,單核下,可以利用多道技術,多個核,每個核也都可以利用多道技術(多道技術是針對單核而言的)

假如有四個核,現有六個任務,這樣同一時間只能執行四個任務,分別被分配各了cpu1,cpu2,cpu3,cpu4,一旦任務1遇到i/o就被迫中斷執行,此時任務5就拿到cpu1的時間片區執行,這就是單核下的多道技術

而一旦任務1的i/o結束了,作業系統會重新呼叫它(需知程序的排程、分配給哪個cpu執行,由作業系統說了算),可能被分配給四個cpu中的任意一個去執行

現代的計算機經常會在同一時間做很多件事,一個使用者的pc,都可以同時執行多個任務,一個任務即一個程序

比如:

同步:在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不會返回,大多數函式都是同步呼叫,但是我們在說同步,非同步的時候,特指那些需要其他部件協作或者需要一定時間完成的任務

非同步:和同步相對,當一個非同步功能呼叫發出後,呼叫者不能立刻得到結果,當該非同步功能完成後,通過狀態,通知或**來通知呼叫者,不要用狀態來通知,若這樣則會造成呼叫者就需要每隔一定的時間檢查一次,效率就很低;要使用通知的方式,效率就會很高,因為非同步功能幾乎不需要額外的操作

阻塞:指呼叫結果返回之前,當前執行緒會被掛起(如遇到io操作),函式只有在得到結果後才會將阻塞的執行緒啟用,與同步呼叫是不同的,對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已

#

舉例:#

#2. 阻塞呼叫:當socket工作在阻塞模式的時候,如果沒有資料的情況下呼叫recv函式,則當前執行緒就會被掛起,直到有資料為止。

非阻塞:

與阻塞的概念相對應,指在不能立刻得到結果前,也會立刻返回,同時函式不會阻塞當前執行緒

總結:

#

1. 同步與非同步針對的是函式/任務的呼叫方式:同步就是當一個程序發起一個函式(任務)呼叫的時候,一直等到函式(任務)完成,而程序繼續處於啟用狀態。而非同步情況下是當一個程序發起一個函式(任務)呼叫的時候,不會等函式返回,而是繼續往下執行當,函式返回的時候通過狀態、通知、事件等方式通知程序任務完成。

#2. 阻塞與非阻塞針對的是程序或執行緒:阻塞是當請求不能滿足的時候就將程序掛起,而非阻塞則不會阻塞當前程序