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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux环境编程导引

發布時間:2025/3/17 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux环境编程导引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計算機系統硬件組成

?

總線

貫穿整個系統的一組電子管道稱為總線,?分為:

? 片內總線

? 系統總線

數據總線DB

地址總線AB

控制總線CB

? 外部總線

?

I/O設備

I/O設備是系統與外界聯系的通道

? ? 鍵盤鼠標是輸入設備,顯式器是輸出設備,磁盤既是輸入設備也是輸出設備,輸入輸出是相對于內存來說的。

?

內存

? 內存是一個重要的部件,它是與CPU進行溝通的橋梁。它用來存放程序以及程序要處理的數據,磁盤中的程序要加載到內存才能運行。

?

處理器

? 中央處理器(CPU),簡稱處理器。

? CPU主要有運算器、控制器、寄存器構成

? 取指:?PC,?IR

? 譯碼:?指令譯碼器,?RISC,?CISC

? 執行:?ALU

? 寫回:?->?內存

? 跳轉:?JMP

?

系統結構圖

?

?

DMA傳輸

? ? DMA?(直接訪問內存)傳輸將數據從一個地址空間復制到另外一個地址空間的一種技術。當?CPU?初始化這個傳輸動作時,傳輸動作本身是由?DMA?控制器?來實行和完成,?而CPU可以繼續去完成其他的工作,?CPU僅在傳輸動作的開始和結束的時候參與數據傳輸的控制。?典型的例子就是移動一個外存的區塊到芯片內部的內存區。像是這樣的操作并沒有讓處理器工作拖延,反而可以使CPU重新去處理其他的工作。在實現DMA傳輸時,是由DMA控制器直接掌管總線。


操作系統

什么是操作系統

? ?操作系統是”有效地管理計算機系統中的資源,合理地管理計算機系統的工作流程,方便用戶使用”的程序的集合。

?

操作系統三個基本抽象

? ? 操作系統擁有三個基本抽象概念:?進程、虛擬存儲器和文件。

? ? 文件是對I/O設備的抽象表示,虛擬存儲器是對主存和磁盤I/O設備的抽象表示,進程則是對處理器、主存和I/O設備的抽象表示。


進程

? ?進程是操作系統對正在運行的程序的一種抽象。一個系統可以運行多個進程,而每個進程好像在獨占使用硬件。

?

進程上下文切換

?

?

?

虛擬存儲器

? 虛擬存儲器為每個進程提供了一個大的、一致的、私有的地址空間;

? 它將內存看成是存儲在磁盤上的地址空間的高速緩存,在主存中只保存活動區域,并根據需要在主存與磁盤中來回交換數據。

? 為每個進程提供一致的地址空間,簡化了存儲管理,保護每個進程的地址空間不被其他進程破壞。

?

進程虛地址空間


?

文件

? ?文件是一系列的字節序列,它向應用程序提供了一個統一的視角,來看待系統中各式各樣的I/O設備。

?

虛擬文件系統VFS

? ? 虛擬文件系統是內核實現的一種架構,為用戶空間提供統一的文件操作接口,即文件系統調用。它在內核內部為不同的真實文件系統提供一致的抽象接口。

? ? 用戶通過系統調用與內核中的虛擬文件系統交互,進而操作實際的文件系統和設備。

?


系統編程?VS.?應用編程

系統編程

? ?在操作系統之上利用系統調用、C庫進行對系統資源進行訪問。編寫如apache?、gcc、gdb?等的服務應用.

? ?系統資源包括:處理器,輸入輸出,進程管理,內存,設備,定時器,進程間通信,網絡

應用編程

? ?在更高層次的編程接口或者庫之上構建應用程序。如android程序(android?sdk)、iphone程序(iphone?sdk)、QT程序設計(QT)、MFC程序設計(MFC)等。

?

?

系統調用在系統中所處的位置

? ?所有操作系統都提供多種服務的入口點,由此程序向系統核請求服務。這些入口點被稱之為系統調用(system?call),

?

?

C庫

? ?這里我們所說的C庫(libc),指的是標準C定義的C函數的集合。如標準輸入輸出函數、字符串處理函數、動態存儲分配函數、日期時間函數、數學函數等。

? ?GNU發布的libc稱為glibc.

?

系統調用與C庫關系

? ?系統調用與C庫從形式上來看都C函數;

? ?但C庫函數有些是調用系統調用來實現的,比如說malloc、free調用brk,printf調用write系統調用,而有些函數不需要任何系統調用,比如abs(fabs)、strcpy、atoi等,因為它并不是必需要使用內核服務;

? ?因此系統調用通常提供的是最小界面,而C庫函數通常提供更復雜的功能。

?

內核如何處理系統調用

? ?內核通過軟中斷的方式實現系統調用,?每個系統調用被賦予一個系統調用號,?在i386平臺上,執行一個系統調用需要通過?INT?0x80?指令來完成,?從用戶態切換到核心態.

? ?寄存器eax存放系統調用號,?寄存器ebx、ecx、edx、esi、edi存儲系統調用參數,對于超過5個參數的系統調用,用一個寄存器(如ebx)指向用戶空間的某個緩存,?該緩存存儲所有系統調用的參數(可以多于5個)。

?

錯誤處理

? ?在系統編程中通常通過函數返回值來表示錯誤(一般-1代表函數執行出錯),并通過特殊變量errno來描述。

? ?errno這個全局變量在?errno.h?頭文件中聲明如下:extern?int?errno;

? ? 錯誤處理函數:perror,?strerror;

//示例

int main() {int ret = close(10);/*if (ret == -1){perror("close error");}*/if (ret == -1){fprintf(stderr, "close error with message: %s, errno = %d\n",strerror(errno), errno);}return 0; }
?

常見錯誤代碼

E2BIG

參數列表太長

EACCESS

權限不足

EAGAIN

重試

EBADF

錯誤的文件描述符

EBUSY

設備或資源忙

ECHILD

無子進程

EDOM

數學參數不在函數域內

EEXIST

文件已存在

EFAULT

地址錯誤

EFBIG

文件太大

EINTR

系統調用被中斷

?

//常見錯誤代碼打印程序

int main() {for (int i = 0; i < 140; ++i){errno = i;cout << "errno " << i << ": " << strerror(errno) << endl;}return 0; }

總結

以上是生活随笔為你收集整理的Linux环境编程导引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。