文章目錄
- 操作系統是什么?
- 操作系統核心功能
- 為什么需要操作系統(目的)?
- 操作系統的下層是什么?上層又是什么?
- 如何理解“管理”?——“先描述,再組織”
操作系統是什么?
任何計算機系統都包含?個基本的程序集合,稱為操作系統(OS)。
籠統的說,操作系統包括:
- 內核(進程管理,內存管理,文件管理,驅動管理)
- 其他程序(如函數庫,shell程序等)
操作系統核心功能
在整個計算機軟硬件架構中,操作系統的定位是:?款純正的“搞管理”的軟件
對什么進行管理呢?
操作系統就是一款對計算機硬件和軟件進行管理的軟件。
為什么需要操作系統(目的)?
我們知道,一個良好的秩序是需要管理的,有了良好的秩序,做事情才可以簡單而高效。以我們人類社會為例,每個國家都有政府,政府制定法律法規對人們進行管理,這是人類社會井然有序的關鍵,這是亙古不變的。
計算機的世界也是如此,操作系統就是“政府”,各個硬件軟件就是“人民”。
所以,操作系統通過管理好底層的軟硬件資源(手段),為用戶提供一個良好的執行環境(目的)。
這里用戶其實一般指的是程序員,普通用戶一般不會直接接觸操作系統,一般使用的是程序員開發出來的軟件。
【總結】
- 操作系統幫助用戶管理好下面的軟硬件資源
- 為用戶提供一個良好(穩定、高效、安全)的運行環境
操作系統究竟管理些什么呢?
- 內存管理:內存分配、內存共享、內存保護、內存擴張等等
- 驅動管理:對計算機硬件的驅動程序進行分類、更新、刪除等操作
- 文件管理:文件存儲空間的管理、目錄管理、文件操作管理以及文件保護等等
- 進程管理:其工作主要是進程的調度。
操作系統的下層是什么?上層又是什么?
我們知道,操作系統是對硬件進行管理的,對硬件之間的數據讀取,刷新,數量等等進行管理分配。
那么,操作系統直接和底層硬件打交道嗎?
例如,如果操作系統要自己來讀取硬件的數據,那么只要改變了對硬件讀取數據的方式,那么操作系統的內核源代碼就需要進行重新編譯,也就是重啟操作系統,如此代價太高了。
因此,我們需要使用驅動程序,間接管理底層硬件,此時操作系統就只需關心何時讀取數據,而不用關心數據是如何讀取的了。
那操作系統的上層是什么呢?
第一個想到的一定是我們用戶了,他一定是我們計算機的頂層
但是,直接讓用戶使用操作系統安全嗎?
顯然是不安全的,操作系統中會有各種數據若是被用戶隨意修改,會出現嚴重的問題。
因此,操作系統不相信任何用戶!
為了保證自身數據安全,也為了保證給用戶提供服務,操作系統以接口的方式給用戶提供調用的入口,來獲取操作系統的內部數據。其實就是封裝起來了。
我們知道,Linux是用C語言實現的,所以系統調用是:操作系統提供的用C實現的,自己內部函數的調用
總之,所有訪問操作系統的行為,都只能通過系統調用完成
但是,讓所有用戶訪問操作系統都直接系統調用嗎?這樣對于像我們這樣的普通用戶的使用成本是不是太高了?
因為要使用系統調用前提條件是你得對系統有一定了解。所以在系統調用的上層又構建出了很多用戶操作接口,它包括lib(函數庫如libc、libc++等等,實際就是我們平時寫程序時調用的庫函數)、shell外殼以及部分指令。
完整結構如下:
如何理解“管理”?——“先描述,再組織”
我們以大學的管理為例
在大學中:
- 最典型的管理者——校長
- 最典型的被管理者——學生
我們想想,你在學校見過校長嗎?亦或是說,所有的學生都見過校長嗎?
管理者和被管理者是不需要見面的!
那不需要見面,校長是如何管理好所有學生的呢?
其實,只要能夠得到被管理人的信息,就可以在未來進行管理決策。
管理的本質:通過對數據的管理,達到對人的管理
我們思考一下,做一件事情分為幾步?
實際上完成任何一件事都要經過兩個過程:
- 決策:決定要不要做這件事或是如何做這件事
- 執行:去做這件事情
校長管理學生,校長其實就是決策者。
那執行者是誰呢?
校長與被學生面都不見,那校長如何獲取對應學生信息呢?
通過輔導員(老師),輔導員就是執行者。
舉個例子,校長需要挑選3個學生代表學校參加算法大賽,于是校長喊來輔導員說:“給我挑出10個算法最優秀學生,把他們信息給我。”于是輔導員在校內舉辦了一場算法校賽,選拔出前10名的學生,將他們的信息交給了校長,校長拿到他們的信息后,挑出了3個人安排去參加算法大賽。
可以發現,管理者在不與被管理者見面的情況下,完成了管理。
校長如何管理學生數據???
成千上萬個學生,難道校長一個一個找嗎?
如果校長曾經是一個程序員,這可忍不了一點,他會定義一個學生類,這個類包含學生的所有屬性,如姓名、學號、電話、班級、專業、績點……。然后實例化出所有學生對象,然后用數據結構(以鏈表為例)將他們存儲起來,最后校長只需要將這個學生鏈表結構管理好就可以了!
#include<list>class student
{
public://……
private:char* name;int age;//……
};list<student> stu_data;
將對學生的管理操作轉化為了對鏈表的增刪查改!
再同步到計算機的世界,我們就好理解了:
- 管理者(決策者)——操作系統
- 執行者——驅動程序
- 被管理者——軟硬件資源
在操作系統中,管理任何對象,最終都可以轉化為對某種數據結構的增刪查改
前者定義類的過程就是描述,后者用數據結構建立模型的過程就是組織。
這里的組織又稱建模,計算機只能這么做!
管理的精髓總結為六個字:先描述,再組織
其實不僅僅對于操作系統做管理是如此,我們在計算機中管理數據也是同理的,比如我們之前寫的通訊錄,先定義一個聯系人類,類中包含聯系人的所有屬性,此行為是描述。之后我們用順序表對所有聯系人進行建模,此行為是組織。最后,我們管理聯系人就轉化為了對這個順序表的增刪查改。
在整個計算機世界中,都遵循“先描述,再組織”!
其實還不僅如此,在現實世界中也是這樣的。我們思考一下,人是怎樣辨別一個事情或者一個對象的?沒錯,都是通過屬性認識的,只要當屬性足夠多,這個屬性集合就是目標對象!
我的意思是,如果在理想情況下,我們可以列出一個對象的所有屬性,則在現實世界中,也遵循“先描述,再組織”!