linux源碼分析-ag真人国际官网
a. 求一段linux操作系統源代碼分析
這個文件非常小 你們老師分析模板給了很好分析了
一,源代碼文件名稱
linux/lib/setsid.c
二,源代碼功能描述
整體功能:如果調用的進程不是一個組的組長時,setsid創建一個新會話。調用進程將成為該新會話的組長,新進程組的組長,並且沒有控制終端。調用進程的組id和會話id被設置成進程的pid,調用進程將成為新進程組合和新會話中的唯一進程。
函數輸入:pid-t,setsid
函數輸出:調用進程的會話標識符
函數功能:(就一個函數,所以就跟整體功能相同就行了)
三,程序流程圖 (可以省略了)
b. 誰能給我一個linux系統中命令的詳細分析(包括源代碼的分析)
linux 命令也是查看使用空間的,但是與df命令不同的是linux 命令是對文件和目錄磁碟使用的空間的查看,還是和df命令有一些區別的,這里介紹linux 命令。
:查詢檔案或目錄的磁碟使用空間
a:顯示全部目錄和其次目錄下的每個檔案所佔的磁碟空間
b:大小用bytes來表示 (默認值為k bytes)
c:最後再加上總計 (默認值)
s:只顯示各檔案大小的總合
x:只計算同屬同一個檔案系統的檔案
l:計算所有的檔案大小
常用命令: –a
操作詳解
引用
指令 能以指定的目錄下的子目錄為單位,顯示每個目錄內所有檔案所佔用的磁碟空間大小。例如:
# -h /etc
104k /etc/defaults
6.0k /etc/x11
8.0k /etc/bluetooth
4.0k /etc/gnats
52k /etc/isdn
388k /etc/mail
68k /etc/mtree
2.0k /etc/ntp
38k /etc/pam.d
44k /etc/periodic/daily
6.0k /etc/periodic/monthly
42k /etc/periodic/security
16k /etc/periodic/weekly
110k /etc/periodic
6.0k /etc/ppp
318k /etc/rc.d
2.0k /etc/skel
130k /etc/ssh
10k /etc/ssl
1.7m /etc
我們目樣使用 -h 參數來顯示 human-readable 的格式。在應用時,我們可以使用 這個指令來查看哪個目錄佔用最多的空間。不過, 的輸出結果通常很長,我們可以加上 -s 參數來省略指定目錄下的子目錄,而只顯示該目錄的總合即可:
# -sh /etc
1.7m /etc
在查看目錄的使用情形時,我們可以將輸出結果導到 sort 指令進行排序,以了解哪個檔案用了最多的空間:
# /etc | sort -nr | more
1746 /etc
388 /etc/mail
318 /etc/rc.d
130 /etc/ssh
110 /etc/periodic
104 /etc/defaults
68 /etc/mtree
52 /etc/isdn
44 /etc/periodic/daily
42 /etc/periodic/security
38 /etc/pam.d
16 /etc/periodic/weekly
10 /etc/ssl
8 /etc/bluetooth
6 /etc/ppp
6 /etc/periodic/monthly
6 /etc/x11
4 /etc/gnats
2 /etc/skel
2 /etc/ntp
sort 的參數 -nr 表示要以數字排序法進行反向排序,因為我們要對目錄大小做排序,所以不可以使用 human-readable 的大小輸出,不然目錄大小中會有 k、m 等字樣,會造成排序不正確。
現在明了了linux 命令和linux df命令的不同之處了嗎
c. linux內核源代碼情景分析 怎麼樣
這段時間一直在為畢業論文糾結,論文題目是關於linux進程模塊的源代碼分析與研究。 以前拜讀過《操作系統設計與實現》,《linux內核設計與實現》,《understanding the linux kernel 3rd》等等,桌面還有大把的網路下下來的資料。 初識這本書,是大三時候一位同學跟我提起,當時覺得還沒到閱讀源代碼的程度。一直到做這篇論文,在我最糾結的時候,忽然想起朋友說過這本書,於是下了電子版本。 理所當然,我完全被這本書吸引。 我難掩心中的激動,幾乎要歡呼起來,這何嘗不是一本可以當做小說閱讀的書籍! 這本書不像前兩本那樣,僅僅只是羅列出linux的特性,數據結構,相關的技術等等,他是在帶領你去走進linux源代碼的世界,順著代碼的調用,一路斬荊披棘,最後帶你到底目的地。途中雖然驚險,但一路過來,卻是充滿了趣味,更是享受到了智力上的成就感。 關於書的語言。 讀這本書,彷彿是你的好朋友就坐在你面前跟你講話,他把linux源碼中的枯燥的理論跟生活中普遍的事物聯系起來,像進程的task_struct結構體,相當於我們的「戶口本」,進程轉換到"zombie」狀態,「進程死亡了無法幫自己注銷戶口登記,要父進程幫忙」等等,這些解釋非常地形象。所謂的大師也便是如此,用最通俗的語言把最深奧的道理講明白,我想,這本書的作者做到了。 此書的不足。 這本書也存在著不足之處。第一點,此書是2001年出版的,所以是以2.4版本的源代碼為基礎的,而現在已經長期停留在2.6版本了;第二是,書中的圖片嚴重不足,很多原理只要附加張圖片便能讓讀者明了,可是作者花了不少的篇幅去解釋而沒有附加圖片,這很讓人費解,或者這是因為錄入不是作者本人做的原因;第三,這跟很多國內書籍類似,沒有索引,查找代碼的講解是件很痛苦的事情。 距離這本書第一次出版已經有八年的時間了,希望作者能抽出時間再修訂,在此基礎上做2.6版本源代碼的分析。 這是我見過的國內比較好的真正用心去寫的計算機書籍,在此之前也只讀過一本關於匯編語言的書籍,作者是王爽。依稀還記得當年舍友都睡了的時候,一個人小心翼翼地趴在筆記本前仔細閱讀的情景,如今甚是懷念。 這是本好書。
d. 怎樣學習並研究linux的源碼
學習linux最好也最值得去學的是源碼分析,因為只有做好了這項工作,才能搞操作系統,尤其是嵌入式系統——一個現在包括以後的很長一段時間內會是一個很熱門的東西。可以說linux是中國的系統軟體,包括嵌入式系統,開發自己的系統,在計算機領域打出一片自己的天下的很好的契機。
有一本書很值得一看,是趙炯的《linux內核完全注釋》,我有電子版本,但太大了,如果你需要可以給我發信息。我可以傳給你。不過我還是喜歡看紙版的書,因此我又買了一本。
你也可以去買一本,相信我,這本書很值得買的。
e. 怎樣解讀linux系統的源代碼
解讀linux
的源代碼,這一點阻擋了許多人的熱情。
我的建議是:隨著技術的發展,linux系統也向著桌面化發展,在內核內加入了越來越多的代碼,是內核越來越臃腫,增加了閱讀的難度.
1.一般情況下linux的源代碼位於/usr/linux下
2.其中的arch目錄下為一些重要的代碼.
3.include目錄下是編譯系統所需要的頭文件
4.其他的一些文件大多可以根據其所在文件夾的名字,以及自身的名字來
判斷.
蒲у姆絞接枰源娣
f. linux內核源碼詳解
linux的內核源代碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是內核源代碼。
對於源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解。對於linux內核源代碼來講,我認為,基本要求是:1、操作系統的基本知識; 2、對c語言比較熟悉,最好要有匯編語言的知識和gnu c對標准c的擴展的知識的了解。
另外在閱讀之前,還應該知道linux內核源代碼的整體分布情況。我們知道現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序、網路等組成。看一下linux內核源代碼就可看出,各個目錄大致對應了這些方面。linux內核源代碼的組成如下(假設相對於linux目錄):
arch 這個子目錄包含了此核心源代碼所支持的硬體體系結構相關的核心代碼。如對於x86平台就是i386。
include 這個目錄包括了核心的大多數include文件。另外對於每種支持的體系結構分別有一個子目錄。
init 此目錄包含核心啟動代碼。
mm 此目錄包含了所有的內存管理代碼。與具體硬體體系結構相關的內存管理代碼位於arch/-/mm目錄下,如對應於x86的就是arch/i386/mm/fault.c 。
drivers 系統中所有的設備驅動都位於此目錄中。它又進一步劃分成幾類設備驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。
ipc 此目錄包含了核心的進程間通訊代碼。
moles 此目錄包含已建好可動態載入的模塊。
fs linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext2文件系統對應的就是ext2子目錄。
kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/-/kernel目錄下。
net 核心的網路部分代碼。裡面的每個子目錄對應於網路的一個方面。
lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/-/lib/目錄下。
scripts 此目錄包含用於配置核心的腳本文件。
documentation 此目錄是一些文檔,起參考作用。
g. linux內核完全注釋 linux內核源代碼情景分析 哪本好我是想做嵌入式開發。
你現在什麼程度啊?都掌握那些基礎知識?
h. linux內核源代碼情景分析適合初學linux的人嗎
如果你有一定的c語言基礎並且對linux的文件系統比較了解的話,可以直接看linux的內核源碼分析
i. linux源碼分析
linux的tcp-ip棧代碼的詳細分析
1.數據結構(msghdr,sk_buff,socket,sock,proto_ops,proto)
bsd套接字層,操作的對象是socket,數據存放在msghdr這樣的數據結構:
創建socket需要傳遞family,type,protocol三個參數,創建socket其實就是創建一個socket實例,然後創建一個文件描述符結構,並且互相建立一些關聯,即建立互相連接的指針,並且初始化這些對文件的寫讀操作映射到socket的read,write函數上來。
同時初始化socket的操作函數(proto_ops結構),如果傳入的type參數是stream類型,那麼就初始化為socket->ops為inet_stream_ops,如果是dgram類型,則socket-ops為inet_dgram_ops。對於inet_stream_ops其實是一個結構體,包含了stream類型的socket操作的一些入口函數,在這些函數里主要做的是對socket進行相關的操作,同時通過調用下面提到的sock中的相關操作完成socket到sock層的傳遞。比如在inet_stream_ops里有個inet_release的操作,這個操作除了釋放socket的類型空間操作外,還通過調用socket連接的sock的close操作,對於stream類型來說,即tcp_close來關閉sock
釋放sock。
創建socket同時還創建sock數據空間,初始化sock,初始化過程主要做的事情是初始化三個隊列,receive_queue(接收到的數據包sk_buff鏈表隊列),send_queue(需要發送數據包的sk_buff鏈表隊列),backlog_queue(主要用於tcp中三次握手成功的那些數據包,自己猜的),根據family、type參數,初始化sock的操作,比如對於family為inet類型的,type為stream類型的,sock->proto初始化為tcp_prot.其中包括stream類型的協議sock操作對應的入口函數。
在一端對socket進行write的過程中,首先會把要write的字元串緩沖區整理成msghdr的數據結構形式(參見linux內核2.4版源代碼分析大全),然後調用sock_sendmsg把msghdr的數據傳送至inet層,對於msghdr結構中數據區中的每個數據包,創建sk_buff結構,填充數據,掛至發送隊列。一層層往下層協議傳遞。一下每層協議不再對數據進行拷貝。而是對sk_buff結構進行操作。
j. linux怎樣從源碼分析查看變數佔用空間
主要使用find和命令來實現。 1、使用find命令找到大於指定大小的文件: a.下例中查找大於10g的文件 [root@localhost data]# find / -type f -size 10g 將輸出: /usr/local/apache2/logs/access_log b.通過命令查看此文件的大小: [root@localhost data]# -h /usr/local/apache2/logs/access_log 24g /usr/local/apache2/logs/access_log c.重復執行find命令來查找大文件,例如:find / -type f -size 5g 找到大於5g的文件。 find / -type f -size 1g 找到大於1g的文件 2、可以遞歸使用 --max-depth=1