當shell加載和運行完hello程序,shell和hello程序都沒有直接訪問鍵盤,顯示器,磁盤或者主存,它們依靠的是操作系統提供的服務。可以把操作系統看成程序和硬件之間插入的一層軟件。
文件是對I/O設備的抽象表示。
虛擬存儲器是對主存和磁盤I/O設備的抽象表示。
進程是對處理器,主存,I/O設備的抽象表示。
進程
操作系統實現交錯執行的機制成爲上下文切換。
操作系統保持跟蹤進程運行所需要的所有狀態信息,這種狀態,叫做上下文。
圖1-12爲示例場景,圖中兩個併發進程:shell進程和hello進程。
- 起初,只有shell進程在運行,即等待命令行上的輸入。
- 當我們讓他運行hello程序時,外殼通過調用一個專門的函數(系統調用),來執行我們的請求。(操作系統保存shell進程的上下文,創建一個hello進程及其上下文,然後將控制權交給新的hello進程)
3.hello進程終止後,操作系統恢復shell進程的上下文,將控制權傳回給它,shell繼續等待下一個命令行輸入。
線程
一個進程可以由多個線程組成,每個線程都運行在進程的上下文中,並共享同樣的代碼和全局數據。
多線程之間比多進程之間更容易共享數據。
虛擬存儲器
它是一個抽象概念,爲每個進程提供了一個假象,即每個進程都在獨佔地使用主存。
每個進程看到的是一致的存儲器,稱爲虛擬地址空間
地址空間最上面的區域是爲操作系統中代碼和數據保留的,這是對所有進程來說都一樣的。
地址空間的底部區域存放用戶進程定義的代碼和數據。
圖中地址從下往上增大。
文件
文件就是字節序列。每個I/O設備,包括磁盤,鍵盤,顯示器,網絡都可以稱爲文件。