原创 轉載-linux 2.6 進程總結

轉載-linux 2.6 進程總結     進程、輕量級進程(LWP)、線程 進程:程序執行體,有生命期,用來分配資源的實體 線程:分配CPU的實體。   用戶空間實現,一個線程阻塞,所有都阻塞。   內核實現,不會所用相關線

原创 C/C++ static和可重入概念

static C++中的static   C++的static有兩種用法:面向過程程序設計中的static和麪向對象程序設計中的static。前者應用於普通變量和函數,不涉及類;後者主要說明static在類中的作用。   一、面向過程設

原创 C語言中使用extern修飾函數要注意(轉)

用extern修飾函數是表示被修飾的函數定義在當前文件外,而該函數用extern聲明類型後就可以被當前文件調用了。使用extern修飾某函數時,對該函數的調用是在連接階段才被處理的。下面我們看一段代碼。 /***************

原创 Linux內核的同步機制

在進入正文前先看一下我在網上看到的帖子: 問:atomic_set(v,i)的定義是這樣的: #define atomic_set(v,i) v->counter=i 但是,在i386體系結構中,不能直接把一個內存操作數通過一條mov指令

原创 Linux頭文件說明

頭文件                                          說明<a s s e r t . h>            驗證程序斷言<c p i o . h>                c p i o歸

原创 printk()函數的總結

printk()函數的總結 我們在使用printk()函數中使用日誌級別爲的是使編程人員在編程過程中自定義地進行信息的輸出,更加容易地掌握系統當前的狀況。對程序的調試起到了很重要的作用。(下文中的日誌級別和控制檯日誌控制級別是一個意思)

原创 轉載 linux2.6內核進程調度

linux2.6內核進程調度     Linux2.4內核進程調度的缺陷:    Linux2.4 內核的進程調度採用時間片輪轉和優先級相結合的調度策略,但存在以下幾個致命缺陷:    1>調度算法時間複雜度是 O(n)。2.4 內核

原创 雙向循環鏈表詳細講解

雙向循環鏈表[email protected], 2008-4-30內核中很多地方使用雙向循環鏈表來維護一些信息,比如任務隊列。雙向循環鏈表定義於include/linux/list.h,只有兩個成員next與prev分別指向後繼與

原创 轉載 linux 2.6線程創建源碼分析

linux 2.6線程創建源碼分析      上章講到線程,現在對線程創建的代碼流程分析下。來一步一步揭開她神祕的面紗  linux內核創建線程函數 kernel_thread(),最終會調用do_fork(). 前面談到線程也是用

原创 mkyaffsimage_2 命令找不到處理方法

今天在製作文件系統的時候,在最後一步將root_2.6.25.8文件系統框架製成root_2.6.25.8.yaffs yaffs文件系統格式的鏡像時,發現找不到mkyaffsimage_2命令,於是到網上下載了mkyaffsimage_

原创 遍歷操作列表的算法

該例子來源於《操作系統原理。技術與編程》一書的p214 free_irq() 該函數將已經使用完的IRQ線釋放掉,以便其他設備使用,源代碼如下: void free_irq(unsigned int irq, void *dev_id)

原创 需要一個1000000的數組實現方法

今天在網上看到如題的一個帖子,覺得值得收藏一下 實現方法: 1. 放在全局區static int c[1000 * 1000];2. 動態分配.int *c;c = malloc(sizeof(int) * 1000 * 1000);  

原创 堆棧與函數調用

[C++對象模型][5]堆棧與函數調用    一 C++程序內存分配 1) 在棧上創建。在執行函數時,函數內局部變量的存儲單元都在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,一般使用寄存器來存取

原创 關於LUN的概念

a、lun的概念    lun的全稱是logical unit number,也就是邏輯單元號。我們知道scsi總線上可掛接的設備數量是有限的,一般爲6個或者15個,我們可以用target ID(也有稱爲scsi id的)來描述這些設備,

原创 內核中的 likely() 與 unlikely() 收藏

內核中的 likely() 與 unlikely() 收藏  在 2.6 內核中,隨處可以見到 likely() 和 unlikely() 的身影,那麼爲什麼要用它們?它們之間有什麼區別? 首先要明確:             if(l