特级做A爰片毛片免费69,永久免费AV无码不卡在线观看,国产精品无码av地址一,久久无码色综合中文字幕

基于linux底層硬盤中斷輔助代碼的分析與設(shè)計(jì).doc

約16頁DOC格式手機(jī)打開展開

基于linux底層硬盤中斷輔助代碼的分析與設(shè)計(jì),基于linux底層硬盤中斷輔助代碼的分析與設(shè)計(jì)頁數(shù):16字?jǐn)?shù):9468基于linux底層硬盤中斷輔助代碼的分析與設(shè)計(jì)【摘要】: 本文對(duì)linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼——底層硬盤中斷輔助程序進(jìn)行了詳細(xì)全面的分析,對(duì)的linux設(shè)備管理部分內(nèi)核源代碼和工作原理進(jìn)行了解剖,并在分析后,作者進(jìn)行了相類似程序設(shè)...
編號(hào):10-68134大小:220.00K
分類: 論文>其他論文

內(nèi)容介紹

此文檔由會(huì)員 usactu 發(fā)布

基于Linux底層硬盤中斷輔助代碼的分析與設(shè)計(jì)


頁數(shù):16 字?jǐn)?shù):9468

基于Linux底層硬盤中斷輔助代碼的分析與設(shè)計(jì)
【摘要】: 本文對(duì)Linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼——底層硬盤中斷輔助程序進(jìn)行了詳細(xì)全面的分析,對(duì)的Linux設(shè)備管理部分內(nèi)核源代碼和工作原理進(jìn)行了解剖,并在分析后,作者進(jìn)行了相類似程序設(shè)計(jì)——虛擬盤設(shè)計(jì),從而進(jìn)一步對(duì)操作系統(tǒng)的基本功能和實(shí)際實(shí)現(xiàn)方式獲得全方位的理解。
【關(guān)鍵字】: 底層硬盤 虛擬盤 驅(qū)動(dòng)器 中斷 分區(qū)表 磁盤超級(jí)塊

1 前言
本文對(duì)Linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼文件進(jìn)行了詳細(xì)全面的分析,并在分析后,作者進(jìn)行了相應(yīng)程序設(shè)計(jì),是一篇有關(guān)Linux(0.11)操作系統(tǒng)部分內(nèi)核基本工作原理的文章,主要目標(biāo)是使用盡量少的篇幅,對(duì)部分的Linux內(nèi)核源代碼進(jìn)行解剖,對(duì)操作系統(tǒng)的基本功能和實(shí)際實(shí)現(xiàn)方式獲得全方位的理解。能夠在僅可能短的時(shí)間內(nèi)做到對(duì)linux內(nèi)核代碼和基本工作原理有一個(gè)深刻的理解,使內(nèi)核的整體運(yùn)作結(jié)構(gòu)能清晰地在腦海中形成。
在對(duì)早期部分內(nèi)核源代碼的分析過程中,作者已經(jīng)發(fā)現(xiàn),早期內(nèi)核源代碼幾乎就是目前所使用的較新內(nèi)核的一個(gè)精簡(jiǎn)版本。通過閱讀Linux早期內(nèi)核版本的源代碼,是學(xué)習(xí)Linux系統(tǒng)的一種行之有效的途徑,并且對(duì)研究和應(yīng)用Linux嵌入式系統(tǒng)也有很大的幫助。所以,作者通過對(duì)大量?jī)?nèi)核版本進(jìn)行比較和選擇后,最終選擇了與目前Linux內(nèi)核基本功能較為相近,又非常短小的0.11版內(nèi)核作為分析與設(shè)計(jì)的最佳版本,并且選擇了底層硬盤中斷輔助程序作為作者分析的對(duì)象,又根據(jù)相類似的原理,作者又進(jìn)行了虛擬盤的設(shè)計(jì)。

2 底層硬盤中斷輔助源代碼及部分語句分析
#include
#include
#include
#include
#include
#include
#include
#include
#include "blk.h"
#define MAJOR_NR 3
#define CMOS_READ(addr)
({outb_p(0x80|addr,0x70);
inb_p(0x71);})
#define MAX_ERRORS 7
#define MAX_HD 2
static void recal_intr(void); // 硬盤中斷程序在復(fù)位操作時(shí)會(huì)調(diào)用的重新校正函數(shù)。
static int recalibrate=1; // 重新校正標(biāo)志。
static int reset=1; // 復(fù)位標(biāo)志。
/*下面結(jié)構(gòu)定義了硬盤參數(shù)及類型*/
struct hd_i_struct
{int head,sect,cyl,wpcom,lzone,ctl;};
#ifdef HD_TYPE // 如果已經(jīng)在include/linux/config.h 中定義了HD_TYPE…
struct hd_i_struct hd_info[]={ HD_TYPE }; // 取定義好的參數(shù)作為hd_info[]的數(shù)據(jù)。
#define NR_HD ((sizeof(hd_info))/(sizeof(struct hd_i_struct))) // 計(jì)算硬盤數(shù)。
#else // 否則,都設(shè)為0值。
struct hd_i_struct hd_info[]={{0,0,0,0,0,0},{0,0,0,0,0,0}};
static int NR_HD=0;
#endif
static struct hd_struct
{long start_sect;
long nr_sects;}hd[5*MAX_HD]={{0,0},};
#define port_read(port,buf,nr)
__asm__("cld;rep;insw"::"d"(port),"D"(buf),"c"(nr):"cx","di")
#define port_write(port,buf,nr)
__asm__("cld;rep;outsw"::"d"(port),"S"(buf),"c"(nr):"cx","si")
extern void hd_interrupt(void);
extern void rd_load(void);
-------------------------------------------------------------------------------
/*下面該函數(shù)只在初始化時(shí)被調(diào)用一次。用靜態(tài)變量callable作為可調(diào)用標(biāo)志。*/
// 該函數(shù)的參數(shù)由初始化程序init/main.c的init子程序設(shè)置為指向0x90080處,此處存放著setup.s程序從BIOS取得的2個(gè)硬盤的基本參數(shù)表(32字節(jié))。
// 本函數(shù)主要功能是讀取CMOS和硬盤參數(shù)表信息,用于設(shè)置硬盤分區(qū)結(jié)構(gòu)hd,并加載RAM虛擬盤和根文件系統(tǒng)。
int sys_setup(void * BIOS)
{static int callable=1;
int i,drive;
unsigned char cmos_disks;
struct partition *p;
struct buffer_h