日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux编程手册读书笔记第二章(20140330)

發(fā)布時(shí)間:2023/11/30 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux编程手册读书笔记第二章(20140330) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 內(nèi)核:管理和分配計(jì)算機(jī)資源(即CPU、RAM和設(shè)備)的核心軟件層
  • Linux內(nèi)核可執(zhí)行文件采用/bootvmlinuz或類似的路徑名,“z”表明內(nèi)核是經(jīng)過壓縮的可執(zhí)行文件。
  • 內(nèi)核主要任務(wù):
  • ? ? 1)進(jìn)程調(diào)度:Linux屬于搶占式多任務(wù)系統(tǒng),多個(gè)進(jìn)程(即運(yùn)行中的程序)可同時(shí)駐留于內(nèi)存,都能獲得對(duì)CPU的使用權(quán)

    ? ? 2)內(nèi)存管理:以高效、公平地方式在進(jìn)程之間共享這一資源,Linux采用了虛擬內(nèi)存管理機(jī)制。

    ?? ? ? ? ? ? ? ? ? ? ? ? ? 虛擬內(nèi)存管理機(jī)制優(yōu)勢(shì):

    ?? ? ? ? ? ? ? ? ? ? ? ? ? a. 進(jìn)程與進(jìn)程之間、進(jìn)程與內(nèi)核之間彼此隔離;一個(gè)進(jìn)程無法讀取或修改內(nèi)核或掐他進(jìn)程的內(nèi)存內(nèi)容

    ?? ? ? ? ? ? ? ? ? ? ? ? ? b. 只需將進(jìn)程的一部分保持在內(nèi)存中,降低了每個(gè)進(jìn)程對(duì)內(nèi)存的需求量,使得可以在內(nèi)存中加載更多的進(jìn)程。

    ? ? 3)提供了文件系統(tǒng):內(nèi)核在磁盤上提供有文件系統(tǒng),允許對(duì)文件執(zhí)行創(chuàng)建、獲取、更新、刪除等操作

    ? ? 4)創(chuàng)建和終止進(jìn)程:內(nèi)核可以將新進(jìn)程載入內(nèi)存,為其提供運(yùn)行所需的資源(CPU、RAM以及對(duì)文件的訪問)。

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一旦進(jìn)程執(zhí)行完畢,內(nèi)核需要確保釋放其占用的資源,以供或許進(jìn)程使用

    ? ? 5)對(duì)設(shè)備的訪問:計(jì)算機(jī)外接設(shè)備(鼠標(biāo)、鍵盤、磁盤等),可實(shí)現(xiàn)計(jì)算機(jī)與外部世界的通信。

    ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 內(nèi)核為進(jìn)程提供了訪問設(shè)備的標(biāo)準(zhǔn)接口,同時(shí)還仲裁多個(gè)進(jìn)程對(duì)同一個(gè)設(shè)備的訪問。

    ? ? 6)聯(lián)網(wǎng):內(nèi)核以用戶進(jìn)程的名義收發(fā)網(wǎng)絡(luò)消息(數(shù)據(jù)包),同時(shí)將該數(shù)據(jù)包路由至目標(biāo)系統(tǒng)。

    ? ? 7)提供系統(tǒng)調(diào)用API:進(jìn)程可以利用系統(tǒng)調(diào)用API,請(qǐng)求內(nèi)核去執(zhí)行各種任務(wù)。


  • 用戶態(tài)和核心態(tài)
  • ? ? ? 1CPU一般在這兩種不同狀態(tài)下運(yùn)行,執(zhí)行硬件指令可使CPU在兩種狀態(tài)來回切換

    ? ? ? 2)虛擬內(nèi)存區(qū)域劃分為:用戶空間部分、內(nèi)核空間部分

    ? ? ? 3)用戶態(tài)下運(yùn)行時(shí),CPU只能訪問被標(biāo)記為用戶空間的內(nèi)存,試圖訪問內(nèi)核空間的內(nèi)存,將會(huì)引發(fā)硬件錯(cuò)誤

    ? ? ? 4)核心態(tài)下運(yùn)行時(shí),CPU既能訪問用戶空間的內(nèi)存,又能訪問內(nèi)核空間的內(nèi)存。

    ? ? ? 5CPU在核心態(tài)下運(yùn)行時(shí),可以執(zhí)行特殊操作。如宕機(jī)(halt)、訪問內(nèi)存管理硬件、設(shè)備I/O操作的初始化


  • 交換區(qū):磁盤空間中的保留區(qū)域,作為RAM的補(bǔ)充---進(jìn)程可被保存至交換區(qū)
  • 內(nèi)核維護(hù)的底層數(shù)據(jù)結(jié)構(gòu),可將進(jìn)程使用的文件名稱轉(zhuǎn)換為磁盤的物理位置
  • 內(nèi)核維護(hù)每個(gè)進(jìn)程的虛擬內(nèi)存與計(jì)算機(jī)物理內(nèi)存及磁盤交換區(qū)之間的映射關(guān)系。
  • 某進(jìn)程可創(chuàng)建另一個(gè)進(jìn)程---真正含義:某進(jìn)程可以請(qǐng)求內(nèi)核創(chuàng)建另一個(gè)進(jìn)程。(因進(jìn)程間所有通信都需要內(nèi)核提供的通信機(jī)制完成)
  • shell(命令解釋器):用于讀取用戶輸入的命令,并執(zhí)行相應(yīng)的程序以響應(yīng)命令。
  • ? ? 1)登陸shell:用戶剛登陸系統(tǒng)時(shí),由系統(tǒng)創(chuàng)建,用以運(yùn)行shell的進(jìn)程。

    ? ? 2)對(duì)于UNIX系統(tǒng)而言,shell只是一個(gè)用戶進(jìn)程。

    ? ? 3)登陸同一臺(tái)計(jì)算機(jī)的不同用戶同時(shí)可以使用不同的shell(就單個(gè)用戶來說,情況也一樣)

    ? ? 4shell設(shè)計(jì)兩個(gè)目的:a. 人機(jī)交互; b. 解釋shell腳本(包含shell命令的文本文件)

    ? ? 5shell內(nèi)置有許多通常與編程語(yǔ)言相關(guān)的功能:包括變量、循環(huán)、條件語(yǔ)句、I/O命令、函數(shù)等

    ? ? 6)幾種重要的shell

    ? ? ? ? ? ? a. Bourne shellsh):歷史最為悠久,曾是UNIX第七版標(biāo)配的shell,包含許多常見特性:I/O重定向、管道、文件名生成(通配符)、

    ?? ? ? ? ? ? ? 變量、環(huán)境變量處理、命令替換、后臺(tái)命令執(zhí)行、函數(shù)等。

    ? ? ? ? ? ? b. C shellcsh):曾經(jīng)時(shí)BSD系統(tǒng)的標(biāo)配,但與Bourne shell并不兼容,為了保證在UNIX系統(tǒng)的移植性,人們更傾向使用Bourne shell。

    ? ? ? ? ? ? c. Korn shellksh):AT&T貝爾實(shí)驗(yàn)室編寫,是Bourne shell的繼任者,同時(shí)吸收了C shell的很多交互特性

    ? ? ? ? ? ? d. Bourne again shellbash:GNU項(xiàng)目對(duì)于Bourne shell的重新實(shí)現(xiàn),同時(shí)提供了與Korn shellC shell類似的交互特性。

    ?? ? ? ? ? ? ? LinuxBourne shell正是由Bourne again shell仿真提供的

  • 超級(jí)用戶:用戶ID0,通常登錄名為root
  • 用戶密碼文件/etcpasswd:包含用戶名、用戶IDUID)、組ID、主目錄、登陸shell
  • 用戶組文件/etcgroup:組名、組IDGID)、用戶列表(隸屬于該組的用戶登錄名列表)
  • 為了訪問文件,用戶分為3類:文件(屬主)的用戶;文件用戶同一組的用戶;其他用戶
  • Shell啟動(dòng)的進(jìn)程會(huì)繼承3個(gè)已打開的文件描述符:描述符0為標(biāo)準(zhǔn)輸入;描述符1為標(biāo)準(zhǔn)輸出;描述符2為標(biāo)準(zhǔn)錯(cuò)誤。
  • stdio函數(shù)庫(kù)中,這幾種描述符分別與文件流stdinstdoutstderr相對(duì)應(yīng)
  • C語(yǔ)言標(biāo)準(zhǔn)庫(kù)的I/O函數(shù)(stdio函數(shù)庫(kù)):fopenfclosescanfprintffgetsfputs ? ? stdio函數(shù)位于I/O系統(tǒng)調(diào)用層(openclosereadwrite 等)之上。
  • 過濾器:從stdin讀取輸入,加以轉(zhuǎn)換,再將轉(zhuǎn)換后的數(shù)據(jù)輸出到stdout,常將擁有上述行為的程序稱為過濾器,如cat、greptr、sort、wc、sedawk
  • 邏輯上將一個(gè)進(jìn)程劃分為以下幾個(gè)部分(也稱為段)
  • ? ? 1)文本:程序的指令

    ? ? 2)數(shù)據(jù):程序使用的靜態(tài)變量

    ? ? 3)堆:程序可以從該區(qū)域動(dòng)態(tài)分配額外內(nèi)存

    ? ? 4)棧:隨函數(shù)調(diào)用、返回而增減的一片內(nèi)存,用于為局部變量和函數(shù)調(diào)用鏈接信息分配存儲(chǔ)空間。

    19.子進(jìn)程從父進(jìn)程處繼承數(shù)據(jù)段、棧段、堆段的副本后,可以修改這些內(nèi)容,不影響父進(jìn)程的原版內(nèi)容。

  • 有兩種方式可以終止一個(gè)進(jìn)程:其一,進(jìn)程使用_exit()系統(tǒng)調(diào)用(或相關(guān)的exit()庫(kù)函數(shù)),請(qǐng)求退出;其二,向進(jìn)程傳遞信號(hào),將其殺死。
  • 進(jìn)程的終止?fàn)顟B(tài),一個(gè)非負(fù)小整數(shù),可供父進(jìn)程的wait()系統(tǒng)調(diào)用檢測(cè)。
  • 終止?fàn)顟B(tài)為0表示進(jìn)程功成身退,非0表示有錯(cuò)誤發(fā)生。
  • 大多數(shù)shell會(huì)將前一執(zhí)行程序的終止?fàn)顟B(tài)保存于shell變量$?中。
  • init進(jìn)程:系統(tǒng)引導(dǎo)時(shí),內(nèi)核創(chuàng)建,是所有進(jìn)程之父,該進(jìn)程相應(yīng)的程序文件為sbininit”init的進(jìn)程號(hào)為1,總以超級(jí)用戶權(quán)限運(yùn)行。誰(shuí)(哪怕是超級(jí)用戶)都不能殺死”init進(jìn)程,只有關(guān)閉系統(tǒng)才能終止該進(jìn)程。init的主要任務(wù)是創(chuàng)建并監(jiān)控系統(tǒng)運(yùn)行所需的一系列進(jìn)程。
  • 進(jìn)程間通信(IPC)機(jī)制:
  • ? ? 1)信號(hào)(signal),用來表示事件的發(fā)生

    ? ? 2)管道(亦即shell用戶所熟悉的操作符)和FIFO,用于在進(jìn)程間傳遞數(shù)據(jù)

    ? ? 3)套接字,供同一臺(tái)主機(jī)或是聯(lián)網(wǎng)的不同主機(jī)上所運(yùn)行的進(jìn)程之間傳遞數(shù)據(jù)。

    ? ? 4)文件鎖定,為防止其他進(jìn)程讀取或更新文件內(nèi)容,允許某進(jìn)程對(duì)文件的部分區(qū)域加以鎖定

    ? ? 5)消息隊(duì)列:用于在進(jìn)程間交換消息

    ? ? 6)信號(hào)量(semaphore):用來同步進(jìn)程動(dòng)作

    ? ? 7)共享內(nèi)存:允許兩個(gè)及兩個(gè)以上進(jìn)程共享一塊內(nèi)存。當(dāng)某進(jìn)程改變了共享內(nèi)存的內(nèi)容時(shí),其他所有進(jìn)程會(huì)立即了解到這一變化。

    26.內(nèi)核、其他進(jìn)程(只要有相應(yīng)的權(quán)限)或進(jìn)程自身均可向進(jìn)程發(fā)送信號(hào)。

  • 發(fā)生下列情況之一時(shí),內(nèi)核可以向進(jìn)程發(fā)送信號(hào):
  • ? ? 1)用戶鍵入中斷字符(通常為CtrlC

    ? ? 2)進(jìn)程的子進(jìn)程之一已經(jīng)終止

    ? ? 3)由進(jìn)程設(shè)定的定時(shí)器(告警時(shí)鐘)已經(jīng)到期。

    ? ? 4)進(jìn)程嘗試訪問無效的內(nèi)存地址。

    28.shell中,可使用kill命令向進(jìn)程發(fā)送信號(hào);在程序內(nèi)部,系統(tǒng)調(diào)用kill()可提供相同的功能。

  • 收到信號(hào)時(shí),進(jìn)程會(huì)根據(jù)信號(hào)采取如下動(dòng)作之一:忽略信號(hào);? ? ? 被信號(hào)“”殺死; ? ? 先掛起,之后再被專用信號(hào)喚醒。
  • 多個(gè)線程之間,共享同一數(shù)據(jù)區(qū)域和堆,每個(gè)線程擁有屬于自己的棧。線程之間可以通過共享的全局變量進(jìn)行通信。
  • shell執(zhí)行的每個(gè)程序都會(huì)在一個(gè)新進(jìn)程內(nèi)發(fā)起。比如,shell創(chuàng)建了3個(gè)進(jìn)程來執(zhí)行以下管道命令(在當(dāng)前的工作目錄下,根據(jù)文件大小對(duì)文件進(jìn)行排序并顯示):ls -l | sort -k5n | less
  • 偽終端:是一對(duì)相互連接的虛擬設(shè)備,也稱為主從設(shè)備。在這對(duì)設(shè)備之間,設(shè)有一條IPC信道,可供數(shù)據(jù)進(jìn)行雙向傳遞。telnetssh都屬于偽終端。
  • 總結(jié)

    以上是生活随笔為你收集整理的Linux编程手册读书笔记第二章(20140330)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。