亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ll_rw_blk.c

?? linux完全注釋的源代碼。內(nèi)核版本為0.11的linux kernel。
?? C
字號:
/* passed* linux/kernel/blk_dev/ll_rw.c** (C) 1991 Linus Torvalds*/#include <set_seg.h>
/** This handles all read/write requests to block devices*//** 該程序處理塊設(shè)備的所有讀/寫操作。*/#include <errno.h>		// 錯誤號頭文件。包含系統(tǒng)中各種出錯號。(Linus 從minix 中引進(jìn)的)#include <linux/sched.h>	// 調(diào)度程序頭文件,定義了任務(wù)結(jié)構(gòu)task_struct、初始任務(wù)0 的數(shù)據(jù),// 還有一些有關(guān)描述符參數(shù)設(shè)置和獲取的嵌入式匯編函數(shù)宏語句。#include <linux/kernel.h>	// 內(nèi)核頭文件。含有一些內(nèi)核常用函數(shù)的原形定義。#include <asm/system.h>		// 系統(tǒng)頭文件。定義了設(shè)置或修改描述符/中斷門等的嵌入式匯編宏。#include "blk.h"		// 塊設(shè)備頭文件。定義請求數(shù)據(jù)結(jié)構(gòu)、塊設(shè)備數(shù)據(jù)結(jié)構(gòu)和宏函數(shù)等信息。/** The request-struct contains all necessary data* to load a nr of sectors into memory*//** 請求結(jié)構(gòu)中含有加載nr 扇區(qū)數(shù)據(jù)到內(nèi)存的所有必須的信息。*/struct request request[NR_REQUEST] = {0};/** used to wait on when there are no free requests*//* 是用于請求數(shù)組沒有空閑項(xiàng)時的臨時等待處 */struct task_struct *wait_for_request = NULL;/* blk_dev_struct is:* do_request-address* next-request*//* blk_dev_struct 塊設(shè)備結(jié)構(gòu)是:(kernel/blk_drv/blk.h,23)* do_request-address //對應(yīng)主設(shè)備號的請求處理程序指針。* current-request // 該設(shè)備的下一個請求。*/// 該數(shù)組使用主設(shè)備號作為索引(下標(biāo))。struct blk_dev_struct blk_dev[NR_BLK_DEV] = {	{NULL, NULL},		/* no_dev */// 0 - 無設(shè)備。	{NULL, NULL},		/* dev mem */// 1 - 內(nèi)存。	{NULL, NULL},		/* dev fd */// 2 - 軟驅(qū)設(shè)備。	{NULL, NULL},		/* dev hd */// 3 - 硬盤設(shè)備。	{NULL, NULL},		/* dev ttyx */// 4 - ttyx 設(shè)備。	{NULL, NULL},		/* dev tty */// 5 - tty 設(shè)備。	{NULL, NULL}		/* dev lp */// 6 - lp 打印機(jī)設(shè)備。};// 鎖定指定的緩沖區(qū)bh。如果指定的緩沖區(qū)已經(jīng)被其它任務(wù)鎖定,則使自己睡眠(不可中斷地等待),// 直到被執(zhí)行解鎖緩沖區(qū)的任務(wù)明確地喚醒。static _inline voidlock_buffer (struct buffer_head *bh){	cli ();			// 清中斷許可。	while (bh->b_lock)		// 如果緩沖區(qū)已被鎖定,則睡眠,直到緩沖區(qū)解鎖。		sleep_on (&bh->b_wait);	bh->b_lock = 1;		// 立刻鎖定該緩沖區(qū)。	sti ();			// 開中斷。}// 釋放(解鎖)鎖定的緩沖區(qū)。static _inline voidunlock_buffer (struct buffer_head *bh){	if (!bh->b_lock)		// 如果該緩沖區(qū)并沒有被鎖定,則打印出錯信息。		printk ("ll_rw_block.c: buffer not locked\n\r");	bh->b_lock = 0;		// 清鎖定標(biāo)志。	wake_up (&bh->b_wait);	// 喚醒等待該緩沖區(qū)的任務(wù)。}/** add-request adds a request to the linked list.* It disables interrupts so that it can muck with the* request-lists in peace.*//** add-request()向連表中加入一項(xiàng)請求。它關(guān)閉中斷,* 這樣就能安全地處理請求連表了 *///// 向鏈表中加入請求項(xiàng)。參數(shù)dev 指定塊設(shè)備,req 是請求的結(jié)構(gòu)信息。  static voidadd_request (struct blk_dev_struct *dev, struct request *req){	struct request *tmp;	req->next = NULL;	cli ();			// 關(guān)中斷。	if (req->bh)		req->bh->b_dirt = 0;	// 清緩沖區(qū)“臟”標(biāo)志。// 如果dev 的當(dāng)前請求(current_request)子段為空,則表示目前該設(shè)備沒有請求項(xiàng),本次是第1 個// 請求項(xiàng),因此可將塊設(shè)備當(dāng)前請求指針直接指向請求項(xiàng),并立刻執(zhí)行相應(yīng)設(shè)備的請求函數(shù)。	if (!(tmp = dev->current_request))	{		dev->current_request = req;		sti ();			// 開中斷。		(dev->request_fn) ();	// 執(zhí)行設(shè)備請求函數(shù),對于硬盤(3)是do_hd_request()。		return;	}// 如果目前該設(shè)備已經(jīng)有請求項(xiàng)在等待,則首先利用電梯算法搜索最佳位置,然后將當(dāng)前請求插入// 請求鏈表中。	for (; tmp->next; tmp = tmp->next)	if ((IN_ORDER (tmp, req) ||		!IN_ORDER (tmp, tmp->next)) && IN_ORDER (req, tmp->next))		break;	req->next = tmp->next;	tmp->next = req;	sti ();}//// 創(chuàng)建請求項(xiàng)并插入請求隊(duì)列。參數(shù)是:主設(shè)備號major,命令rw,存放數(shù)據(jù)的緩沖區(qū)頭指針bh。static voidmake_request (int major, int rw, struct buffer_head *bh){	struct request *req;	int rw_ahead;/* WRITEA/READA 是特殊的情況 - 它們并不是必要的,所以如果緩沖區(qū)已經(jīng)上鎖,*//* 我們就不管它而退出,否則的話就執(zhí)行一般的讀/寫操作。 */// 這里'READ'和'WRITE'后面的'A'字符代表英文單詞Ahead,表示提前預(yù)讀/寫數(shù)據(jù)塊的意思。// 當(dāng)指定的緩沖區(qū)正在使用,已被上鎖時,就放棄預(yù)讀/寫請求。	if (rw_ahead = (rw == READA || rw == WRITEA))	{		if (bh->b_lock)			return;		if (rw == READA)			rw = READ;		else			rw = WRITE;	}// 如果命令不是READ 或WRITE 則表示內(nèi)核程序有錯,顯示出錯信息并死機(jī)。	if (rw != READ && rw != WRITE)		panic ("Bad block dev command, must be R/W/RA/WA");// 鎖定緩沖區(qū),如果緩沖區(qū)已經(jīng)上鎖,則當(dāng)前任務(wù)(進(jìn)程)就會睡眠,直到被明確地喚醒。	lock_buffer (bh);// 如果命令是寫并且緩沖區(qū)數(shù)據(jù)不臟,或者命令是讀并且緩沖區(qū)數(shù)據(jù)是更新過的,則不用添加// 這個請求。將緩沖區(qū)解鎖并退出。	if ((rw == WRITE && !bh->b_dirt) || (rw == READ && bh->b_uptodate))	{		unlock_buffer (bh);		return;	}repeat:/* 我們不能讓隊(duì)列中全都是寫請求項(xiàng):我們需要為讀請求保留一些空間:讀操作* 是優(yōu)先的。請求隊(duì)列的后三分之一空間是為讀準(zhǔn)備的。*/// 請求項(xiàng)是從請求數(shù)組末尾開始搜索空項(xiàng)填入的。根據(jù)上述要求,對于讀命令請求,可以直接// 從隊(duì)列末尾開始操作,而寫請求則只能從隊(duì)列的2/3 處向頭上搜索空項(xiàng)填入。	if (rw == READ)		req = request + NR_REQUEST;	// 對于讀請求,將隊(duì)列指針指向隊(duì)列尾部。	else		req = request + ((NR_REQUEST * 2) / 3);	// 對于寫請求,隊(duì)列指針指向隊(duì)列2/3 處。/* 搜索一個空請求項(xiàng) */// 從后向前搜索,當(dāng)請求結(jié)構(gòu)request 的dev 字段值=-1 時,表示該項(xiàng)未被占用。	while (--req >= request)		if (req->dev < 0)			break;/* 如果沒有找到空閑項(xiàng),則讓該次新請求睡眠:需檢查是否提前讀/寫 */// 如果沒有一項(xiàng)是空閑的(此時request 數(shù)組指針已經(jīng)搜索越過頭部),則查看此次請求是否是// 提前讀/寫(READA 或WRITEA),如果是則放棄此次請求。否則讓本次請求睡眠(等待請求隊(duì)列// 騰出空項(xiàng)),過一會再來搜索請求隊(duì)列。	if (req < request)	{				// 如果請求隊(duì)列中沒有空項(xiàng),則		if (rw_ahead)		{			// 如果是提前讀/寫請求,則解鎖緩沖區(qū),退出。			unlock_buffer (bh);			return;		}		sleep_on (&wait_for_request);	// 否則讓本次請求睡眠,過會再查看請求隊(duì)列。		goto repeat;	}/* 向空閑請求項(xiàng)中填寫請求信息,并將其加入隊(duì)列中 */// 請求結(jié)構(gòu)參見(kernel/blk_drv/blk.h,23)。	req->dev = bh->b_dev;		// 設(shè)備號。	req->cmd = rw;		// 命令(READ/WRITE)。	req->errors = 0;		// 操作時產(chǎn)生的錯誤次數(shù)。	req->sector = bh->b_blocknr << 1;	// 起始扇區(qū)。(1 塊=2 扇區(qū))	req->nr_sectors = 2;		// 讀寫扇區(qū)數(shù)。	req->buffer = bh->b_data;	// 數(shù)據(jù)緩沖區(qū)。	req->waiting = NULL;		// 任務(wù)等待操作執(zhí)行完成的地方。	req->bh = bh;			// 緩沖區(qū)頭指針。	req->next = NULL;		// 指向下一請求項(xiàng)。	add_request (major + blk_dev, req);	// 將請求項(xiàng)加入隊(duì)列中(blk_dev[major],req)。}//// 低層讀寫數(shù)據(jù)塊函數(shù)。// 該函數(shù)主要是在fs/buffer.c 中被調(diào)用。實(shí)際的讀寫操作是由設(shè)備的request_fn()函數(shù)完成。// 對于硬盤操作,該函數(shù)是do_hd_request()。(kernel/blk_drv/hd.c,294)void ll_rw_block (int rw, struct buffer_head *bh){	unsigned int major;		// 主設(shè)備號(對于硬盤是3)。// 如果設(shè)備的主設(shè)備號不存在或者該設(shè)備的讀寫操作函數(shù)不存在,則顯示出錯信息,并返回。	if ((major = MAJOR (bh->b_dev)) >= NR_BLK_DEV ||		!(blk_dev[major].request_fn))	{		printk ("Trying to read nonexistent block-device\n\r");		return;	}	make_request (major, rw, bh);	// 創(chuàng)建請求項(xiàng)并插入請求隊(duì)列。}//// 塊設(shè)備初始化函數(shù),由初始化程序main.c 調(diào)用(init/main.c,128)。// 初始化請求數(shù)組,將所有請求項(xiàng)置為空閑項(xiàng)(dev = -1)。有32 項(xiàng)(NR_REQUEST = 32)。void blk_dev_init (void){	int i;	for (i = 0; i < NR_REQUEST; i++)	{		request[i].dev = -1;		request[i].next = NULL;	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美蜜桃一区二区三区| 99视频超级精品| 欧美大片一区二区| 精品一区二区三区在线观看| 欧美精品一区二区久久久| 国产在线麻豆精品观看| 国产精品免费av| 91免费小视频| 香蕉成人啪国产精品视频综合网| 制服丝袜日韩国产| 日本不卡在线视频| 日韩精品一区二区三区四区视频| 国产一区二区女| 亚洲激情校园春色| 欧美精品日日鲁夜夜添| 午夜电影久久久| 亚洲精品一区二区三区99| 成人av片在线观看| 亚洲成人免费视| 国产亚洲欧美色| 欧美伊人久久大香线蕉综合69| 看电影不卡的网站| 中文字幕一区二区三区蜜月| 欧美日韩精品二区第二页| 国产又粗又猛又爽又黄91精品| 亚洲欧美怡红院| 日韩三区在线观看| a亚洲天堂av| 久久精品国产久精国产爱| 国产精品久久久久久久久图文区 | 国产一区二区三区最好精华液| 国产精品网友自拍| 欧美精品在线观看播放| 粉嫩嫩av羞羞动漫久久久 | 亚洲素人一区二区| 欧美一区二区三区四区五区| av资源网一区| 麻豆精品在线视频| 亚洲已满18点击进入久久| 久久久精品欧美丰满| 欧美日韩成人综合天天影院| 成人av电影在线播放| 日韩福利电影在线| 亚洲激情男女视频| 国产日韩欧美精品综合| 日韩午夜在线观看视频| 色婷婷久久久久swag精品| 国产丶欧美丶日本不卡视频| 亚洲一区二区欧美日韩| 中文字幕一区二区三区四区| 精品久久久久久久久久久久久久久久久 | 日本欧美一区二区| 一区二区三区精品视频在线| 国产精品视频第一区| 亚洲精品一区二区三区蜜桃下载 | 韩国三级在线一区| 婷婷综合另类小说色区| 亚洲精品视频在线| 综合久久久久久| 欧美高清在线一区二区| 久久久久久一二三区| 欧美一卡二卡在线观看| 欧美理论片在线| 欧美日韩黄色影视| 在线精品亚洲一区二区不卡| 91麻豆精东视频| 成人禁用看黄a在线| 国产激情一区二区三区| 国产精品夜夜嗨| 国产精品123| 风间由美中文字幕在线看视频国产欧美| 理论电影国产精品| 精品无码三级在线观看视频| 美国精品在线观看| 蜜臀a∨国产成人精品| 日韩高清在线一区| 日韩成人一区二区| 美女久久久精品| 裸体健美xxxx欧美裸体表演| 麻豆免费看一区二区三区| 另类人妖一区二区av| 欧美午夜精品理论片a级按摩| 色素色在线综合| 一本大道久久a久久精品综合| 91在线视频网址| 在线亚洲人成电影网站色www| 欧美在线观看视频一区二区三区| 欧美性色aⅴ视频一区日韩精品| 欧美性三三影院| 欧美一级黄色录像| 国产性色一区二区| 亚洲欧洲日韩女同| 亚洲精品美腿丝袜| 日本免费新一区视频| 国产麻豆精品视频| 91一区二区三区在线观看| 欧美性猛片xxxx免费看久爱 | 欧美videofree性高清杂交| 精品国产露脸精彩对白| 国产精品入口麻豆九色| 亚洲麻豆国产自偷在线| 亚洲国产精品久久久久婷婷884 | 亚洲va国产va欧美va观看| 日韩成人一区二区| 国产成人亚洲综合a∨婷婷图片| 成人午夜又粗又硬又大| 91免费看`日韩一区二区| 欧美老女人第四色| 中文字幕欧美激情| 午夜精品视频一区| 国产精品亚洲专一区二区三区| 99天天综合性| 日韩美女天天操| 亚洲人成网站在线| 精品无人码麻豆乱码1区2区| 99国产精品久久久久| 日韩一区二区三区四区| 国产精品乱码一区二区三区软件| 亚洲一级不卡视频| 国产一区二区三区| 欧美图片一区二区三区| 国产色综合久久| 五月婷婷久久综合| 94-欧美-setu| 日韩精品一区二区三区视频播放| 亚洲欧美日韩中文播放| 免费国产亚洲视频| 在线免费不卡电影| 国产日产精品一区| 男人的天堂久久精品| 96av麻豆蜜桃一区二区| 久久综合丝袜日本网| 午夜一区二区三区在线观看| 成人91在线观看| 久久久亚洲综合| 美日韩黄色大片| 欧美性色黄大片手机版| 国产精品久久久久久久久动漫 | 亚洲一区二区三区四区五区黄| 国产一区二区三区在线看麻豆| 欧美日韩亚洲丝袜制服| 国产精品久久久久久久岛一牛影视| 日韩av一区二区在线影视| 在线视频欧美精品| 国产精品成人网| 国产一区二区在线视频| 欧美一区二区成人| 爽好多水快深点欧美视频| 一本一本大道香蕉久在线精品 | 欧美日本在线视频| 一区二区三区免费看视频| 国产 日韩 欧美大片| 26uuu国产电影一区二区| 日韩av电影一区| 欧美日韩一区精品| 亚洲国产精品影院| 欧美三级在线看| 一区二区在线看| 一本大道av一区二区在线播放| 中文字幕不卡的av| 成人av免费在线观看| 国产精品麻豆视频| av电影天堂一区二区在线观看| 国产视频一区不卡| 国产精品99久久久久久似苏梦涵| 精品国产露脸精彩对白| 精品一区二区综合| 久久天堂av综合合色蜜桃网| 精品一区二区国语对白| 日韩视频一区在线观看| 久久精品国产秦先生| 精品国产91乱码一区二区三区 | 97精品电影院| 亚洲情趣在线观看| 在线日韩一区二区| 亚洲大尺度视频在线观看| 欧美日韩国产成人在线免费| 日韩影院精彩在线| 精品少妇一区二区三区| 国产一二精品视频| 国产精品第四页| 欧美性欧美巨大黑白大战| 日韩有码一区二区三区| 精品欧美乱码久久久久久1区2区| 国产在线播放一区二区三区| 国产精品色哟哟网站| 色噜噜狠狠成人中文综合 | 一区二区三区精品在线| 欧美人xxxx| 国产美女一区二区三区| 国产精品入口麻豆原神| 欧美在线免费观看亚洲| 日本不卡一区二区三区| 久久精品视频一区| 91福利区一区二区三区| 奇米777欧美一区二区| 国产午夜精品福利| 欧美影视一区二区三区| 久久激五月天综合精品| ...中文天堂在线一区|