本身的一點總結,把知識從新編碼~html
1、操做系統概述linux
在Richard Stevens的unix環境高級編程中這樣定義「它控制計算機硬件資源,提供程序運行環境。通常而言咱們稱這種軟件爲內核(kernel),它相對較小,位於環境的中心」。總結下就是控制硬件,提供環境。程序員主要關心的是所謂的環境,主要說下提供什麼環境。程序員
操做系統都會想爲它們運行的程序提供各類服務,執行新的程序,打開文件,讀文件,分配存儲空間,得到當前時間等(通常經過系統調用)。面試
廣義上,操做系統還有內核外的系統調用,基於系統調用的shell(也是一種特殊的應用程序,爲其餘應用程序提供接口)和庫函數(對系統調用的封裝),和基於shell,系統調用,庫函數(這三個東西基本組成了咱們經常使用的環境)的應用軟件。有圖以下:shell
在使用linux的man幫助的時候能夠指定是查詢系統命令仍是系統調用使用man時能夠指定不一樣的section來瀏覽,各個section 以下:編程
1 - commands安全
2 - system calls網絡
3 - library calls併發
其實還有其餘的section 不常見就沒有列出來,能夠man 1 chmod 也能夠 man 2 chmod 獲得的幫助內容是不一樣的。函數
爲了增長unix可移植性,IEEE定義了POSIX的標準,後來這個標準不僅限於unix操做系統。POSIX標準只是定義了一套接口,並無規定接口的實現(相似於概要設計),(各個操做系統對接口的實現可能有所不一樣),也沒有詳細的區分系統調用和庫函數,全部的例程都叫作函數。須要說明的是,並非每一個操做系統都嚴格遵照POSIX標準,POSIX標準如今是一個很大的協議族(相似於TCP/IP),標準不少。
2、Linux 是什麼內核是什麼
Linus Torvalds1991年的一片文章上寫道「
LINUX is a free unix-like kernel for 386-AT computers, coming with full source code. It is meant for hackers/computer science students to use, learn and enjoy. It is written mostly inC, but parts of it are in gnu-format assembler, and the boot-sequence is in intel 086 assembly language. TheC-code is relatively ANSI, with a few GNU enhancements (mostly__asm__ andinline).
」-其實,linux只是一個主要用c寫的內核。
從不一樣的角度來看,內核擔任的角色不一樣。從純技術角度來看,內核只是軟件和硬件的一箇中間層,它把從軟件發來的請求發送給硬件,完成尋址等操做,還充當了底層驅動。
從應用程序角度來看,內核是對硬件的一個高層次的抽象,應用程序與硬件沒有聯繫,只與內核有聯繫,內核是應用程序知道的最底層。
從多個併發的進程的角度來看,內核是一個資源管理器,它完成對進程的切換,調度,共享計算機資源(CPU,內存,磁盤,網絡等)。
還能夠把內核當作一個庫,經過系統調用向內核發送各類請求。
3、內核有什麼
這個問題是淘寶面試的時候問個人問題,當時不知道從何下手,簡單的總結下。有什麼,最簡單的就是直接看看內核源代碼文件夾下有什麼,通常內核文件在linux的目錄/usr/src/kernels的文件夾下,我安裝的操做系統是redhet的,當時沒有安裝上內核源文件,並且即便是安裝上了也是2.6版本的,也不便於學習,因此下載了一個0.11版本的在http://www.oldlinux.org/index_cn.html上面,1.0版本及以上的可在http://www.kernel.org/pub/linux/kernel/上下載到。
簡單看下1.0版本有什麼文件主要的:
drivers:驅動代碼
fs:文件系統的代碼
include :包含文件,這個文件利用其餘模塊重建內核
init:初始化代碼,內核工做的起點 //這裏面有內核初始化程序main.c,是內核完成全部初始化工做並進入正常運行的關鍵
ipc:進程間通訊的相關代碼
kernel:主內核的代碼 //最重要的是進程調度函數schedule()、sleep_on()函數和有關的系統調用程序
mm:內存管理的代碼
net:網絡管理的代碼
0.11版本的.c文件代碼有8578行,而1.0版本里面的.c文件代碼大概有14w行,其中drives文件夾下就有7w行,2.6版本的有幾百萬行,估計那是任何大嬸也讀不完的~
上面簡單的說明了源代碼的目錄結構,若是從系統的結構來看,linux操做系統能夠分紅五個比較核心的模塊,進程調度模塊,內存管理模塊,文件系統模塊,進程間通訊模塊和網絡接口模塊。其中的內存管理模塊用於確保全部的進程可以安全地共享機器主要內存區,同時內存管理模塊還支持虛擬內存的管理方式,使得Linux支持進程使用比實際內存空間多的內存容量。文件系統模塊用於支持對外部設備的驅動和存儲,虛擬文件系統模塊經過對向全部的外部存儲設備提供一個通用的文件接口,隱藏了各類硬件設備的不一樣細節,提升兼容性。下面是操做系統各個模塊間的簡單關係,虛線和虛框表示0.11上還爲實現。
從圖中能夠看出,全部的模塊都與進程調度模塊存在依賴關係,由於他們都須要依靠進程調度程序來掛起(暫停)或從新運行它們的進程。還能夠根據源代碼的結構將內核結構劃分紅以下的形式:
//轉載http://blog.csdn.net/ysu108/article/details/7472102