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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ramdisk.c

?? 帶中文注釋的Linux+0.11+源代碼
?? C
字號:
/** linux/kernel/blk_drv/ramdisk.c** Written by Theodore Ts'o, 12/2/91*//* 由Theodore Ts'o 編制,12/2/91*/// Theodore Ts'o (Ted Ts'o)是linux 社區中的著名人物。Linux 在世界范圍內的流行也有他很大的// 功勞,早在Linux 操作系統剛問世時,他就懷著極大的熱情為linux 的發展提供了maillist,并// 在北美洲地區最早設立了linux 的ftp 站點(tsx-11.mit.edu),而且至今仍然為廣大linux 用戶// 提供服務。他對linux 作出的最大貢獻之一是提出并實現了ext2 文件系統。該文件系統已成為// linux 世界中事實上的文件系統標準。最近他又推出了ext3 文件系統,大大提高了文件系統的// 穩定性和訪問效率。作為對他的推崇,第97 期(2002 年5 月)的linuxjournal 期刊將他作為// 了封面人物,并對他進行了采訪。目前,他為IBM linux 技術中心工作,并從事著有關LSB// (Linux Standard Base)等方面的工作。(他的主頁:http://thunk.org/tytso/)#include <string.h>		// 字符串頭文件。主要定義了一些有關字符串操作的嵌入函數。#include <linux/config.h>	// 內核配置頭文件。定義鍵盤語言和硬盤類型(HD_TYPE)可選項。#include <linux/sched.h>	// 調度程序頭文件,定義了任務結構task_struct、初始任務0 的數據,// 還有一些有關描述符參數設置和獲取的嵌入式匯編函數宏語句。#include <linux/fs.h>		// 文件系統頭文件。定義文件表結構(file,buffer_head,m_inode 等)。#include <linux/kernel.h>	// 內核頭文件。含有一些內核常用函數的原形定義。#include <asm/system.h>		// 系統頭文件。定義了設置或修改描述符/中斷門等的嵌入式匯編宏。#include <asm/segment.h>	// 段操作頭文件。定義了有關段寄存器操作的嵌入式匯編函數。#include <asm/memory.h>		// 內存拷貝頭文件。含有memcpy()嵌入式匯編宏函數。#define MAJOR_NR 1		// 內存主設備號是1。#include "blk.h"char *rd_start;			// 虛擬盤在內存中的起始位置。在52 行初始化函數rd_init()中// 確定。參見(init/main.c,124)(縮寫rd_代表ramdisk_)。int rd_length = 0;		// 虛擬盤所占內存大小(字節)。// 執行虛擬盤(ramdisk)讀寫操作。程序結構與do_hd_request()類似(kernel/blk_drv/hd.c,294)。voiddo_rd_request (void){  int len;  char *addr;  INIT_REQUEST;			// 檢測請求的合法性(參見kernel/blk_drv/blk.h,127)。// 下面語句取得ramdisk 的起始扇區對應的內存起始位置和內存長度。// 其中sector << 9 表示sector * 512,CURRENT 定義為(blk_dev[MAJOR_NR].current_request)。  addr = rd_start + (CURRENT->sector << 9);  len = CURRENT->nr_sectors << 9;// 如果子設備號不為1 或者對應內存起始位置>虛擬盤末尾,則結束該請求,并跳轉到repeat 處// (定義在28 行的INIT_REQUEST 內開始處)。  if ((MINOR (CURRENT->dev) != 1) || (addr + len > rd_start + rd_length))    {      end_request (0);      goto repeat;    }// 如果是寫命令(WRITE),則將請求項中緩沖區的內容復制到addr 處,長度為len 字節。  if (CURRENT->cmd == WRITE)    {      (void) memcpy (addr, CURRENT->buffer, len);// 如果是讀命令(READ),則將addr 開始的內容復制到請求項中緩沖區中,長度為len 字節。    }  else if (CURRENT->cmd == READ)    {      (void) memcpy (CURRENT->buffer, addr, len);// 否則顯示命令不存在,死機。    }  else    panic ("unknown ramdisk-command");// 請求項成功后處理,置更新標志。并繼續處理本設備的下一請求項。  end_request (1);  goto repeat;}/** Returns amount of memory which needs to be reserved.*//* 返回內存虛擬盤ramdisk 所需的內存量 */// 虛擬盤初始化函數。確定虛擬盤在內存中的起始地址,長度。并對整個虛擬盤區清零。longrd_init (long mem_start, int length){  int i;  char *cp;  blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;	// do_rd_request()。  rd_start = (char *) mem_start;  rd_length = length;  cp = rd_start;  for (i = 0; i < length; i++)    *cp++ = '\0';  return (length);}/** If the root device is the ram disk, try to load it.* In order to do this, the root device is originally set to the* floppy, and we later change it to be ram disk.*//** 如果根文件系統設備(root device)是ramdisk 的話,則嘗試加載它。root device 原先是指向* 軟盤的,我們將它改成指向ramdisk。*///// 加載根文件系統到ramdisk。voidrd_load (void){  struct buffer_head *bh;  struct super_block s;  int block = 256;		/* Start at block 256 */  int i = 1;  int nblocks;  char *cp;			/* Move pointer */  if (!rd_length)		// 如果ramdisk 的長度為零,則退出。    return;  printk ("Ram disk: %d bytes, starting at 0x%x\n", rd_length, (int) rd_start);	// 顯示ramdisk 的大小以及內存起始位置。  if (MAJOR (ROOT_DEV) != 2)	// 如果此時根文件設備不是軟盤,則退出。    return;// 讀軟盤塊256+1,256,256+2。breada()用于讀取指定的數據塊,并標出還需要讀的塊,然后返回// 含有數據塊的緩沖區指針。如果返回NULL,則表示數據塊不可讀(fs/buffer.c,322)。// 這里block+1 是指磁盤上的超級塊。  bh = breada (ROOT_DEV, block + 1, block, block + 2, -1);  if (!bh)    {      printk ("Disk error while looking for ramdisk!\n");      return;    }// 將s 指向緩沖區中的磁盤超級塊。(d_super_block 磁盤中超級塊結構)。  *((struct d_super_block *) &s) = *((struct d_super_block *) bh->b_data);  brelse (bh);			// [?? 為什么數據沒有復制就立刻釋放呢?]  if (s.s_magic != SUPER_MAGIC)	// 如果超級塊中魔數不對,則說明不是minix 文件系統。/* No ram disk image present, assume normal floppy boot *//* 磁盤中沒有ramdisk 映像文件,退出執行通常的軟盤引導 */    return;// 塊數 = 邏輯塊數(區段數) * 2^(每區段塊數的次方)。// 如果數據塊數大于內存中虛擬盤所能容納的塊數,則不能加載,顯示出錯信息并返回。否則顯示// 加載數據塊信息。  nblocks = s.s_nzones << s.s_log_zone_size;  if (nblocks > (rd_length >> BLOCK_SIZE_BITS))    {      printk ("Ram disk image too big! (%d blocks, %d avail)\n",	      nblocks, rd_length >> BLOCK_SIZE_BITS);      return;    }  printk ("Loading %d bytes into ram disk... 0000k",	  nblocks << BLOCK_SIZE_BITS);// cp 指向虛擬盤起始處,然后將磁盤上的根文件系統映象文件復制到虛擬盤上。  cp = rd_start;  while (nblocks)    {      if (nblocks > 2)		// 如果需讀取的塊數多于3 快則采用超前預讀方式讀數據塊。	bh = breada (ROOT_DEV, block, block + 1, block + 2, -1);      else			// 否則就單塊讀取。	bh = bread (ROOT_DEV, block);      if (!bh)	{	  printk ("I/O error on block %d, aborting load\n", block);	  return;	}      (void) memcpy (cp, bh->b_data, BLOCK_SIZE);	// 將緩沖區中的數據復制到cp 處。      brelse (bh);		// 釋放緩沖區。      printk ("\010\010\010\010\010%4dk", i);	// 打印加載塊計數值。      cp += BLOCK_SIZE;		// 虛擬盤指針前移。      block++;      nblocks--;      i++;    }  printk ("\010\010\010\010\010done \n");  ROOT_DEV = 0x0101;		// 修改ROOT_DEV 使其指向虛擬盤ramdisk。}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品区一区二区三区| 国产一区二区在线观看免费| 蜜臀av性久久久久蜜臀av麻豆| 91亚洲国产成人精品一区二区三| 欧美日本一区二区在线观看| 国产精品国产三级国产有无不卡 | 久久成人免费网| 91久久人澡人人添人人爽欧美| 欧美一级高清大全免费观看| 中文字幕视频一区二区三区久| 麻豆精品在线播放| 欧美日韩午夜在线| 亚洲视频 欧洲视频| 国产激情视频一区二区在线观看| 欧美日韩亚洲高清一区二区| 一区二区三区精品在线| 成人黄页在线观看| 国产日韩欧美麻豆| 国产精品一级在线| 久久影院午夜论| 蜜臀av一区二区三区| 538在线一区二区精品国产| 一区二区三区电影在线播| 91影院在线观看| 国产精品二三区| 成人一区二区三区在线观看| 国产日韩欧美精品电影三级在线| 精品一区二区成人精品| 日韩视频在线永久播放| 免费精品视频在线| 日韩欧美一级精品久久| 捆绑调教美女网站视频一区| 日韩午夜激情av| 伦理电影国产精品| 欧美精品一区男女天堂| 国产一区激情在线| 日本一区二区三区电影| 成人av手机在线观看| 中文字幕一区免费在线观看| 成人av片在线观看| 亚洲综合区在线| 欧美妇女性影城| 久久激情五月婷婷| 日韩欧美一卡二卡| 国产成a人亚洲精| 中文字幕亚洲电影| 欧美日韩免费不卡视频一区二区三区| 香蕉乱码成人久久天堂爱免费| 4438成人网| 国产激情视频一区二区三区欧美 | 欧美性三三影院| 一本大道久久a久久精品综合| 久久99国内精品| 99精品国产91久久久久久| 欧美在线观看一区| 日韩午夜激情视频| 久久精品亚洲乱码伦伦中文| 国产精品免费久久| 亚洲国产精品自拍| 亚洲成人动漫精品| 天天亚洲美女在线视频| 精品理论电影在线| 97成人超碰视| 免费成人美女在线观看| 国产精品久久久久久久久动漫| 91官网在线免费观看| 麻豆精品精品国产自在97香蕉| 国产精品福利影院| 欧美一级一级性生活免费录像| 国产精品亚洲成人| 五月天久久比比资源色| 国产女人18毛片水真多成人如厕 | 亚洲影院免费观看| 精品国产精品网麻豆系列| 99久久久久久99| 蜜桃视频在线一区| 亚洲免费观看在线视频| 欧美mv日韩mv亚洲| 欧美影院午夜播放| 成人午夜电影网站| 麻豆国产精品视频| 香蕉影视欧美成人| 国产精品久久久久久久第一福利 | 国产精品久久免费看| 7777女厕盗摄久久久| 99re这里只有精品首页| 国产精品66部| 青青草91视频| 日日夜夜精品免费视频| 国产精品麻豆网站| 久久久久久久综合日本| 日韩一级在线观看| 欧美日韩大陆一区二区| 99在线精品视频| 国产suv精品一区二区三区| 久久精品国产精品亚洲综合| 五月婷婷综合激情| 亚洲电影在线免费观看| 一区二区激情小说| 中文字幕人成不卡一区| 国产亚洲1区2区3区| 精品国产伦一区二区三区观看方式 | 亚洲一区免费在线观看| 欧美国产精品v| 精品福利在线导航| 日韩午夜激情免费电影| 欧美精品久久天天躁| 欧美日韩在线电影| 欧美偷拍一区二区| 日韩女优av电影| 欧美日韩国产免费| 欧美高清精品3d| 这里只有精品视频在线观看| 欧美日韩在线精品一区二区三区激情| 在线亚洲+欧美+日本专区| 91蜜桃传媒精品久久久一区二区| 成人毛片在线观看| 波多野结衣欧美| 91麻豆精品一区二区三区| 日本韩国视频一区二区| 欧美在线不卡视频| 欧美亚洲国产一区在线观看网站| 欧美午夜影院一区| 91麻豆精品91久久久久同性| 91精品婷婷国产综合久久| 在线不卡免费av| 精品成人佐山爱一区二区| 国产女人18毛片水真多成人如厕 | 精品国产乱码久久久久久夜甘婷婷 | 日韩一区二区在线播放| 日韩精品一区二区三区在线 | 欧美电影精品一区二区| 欧美videossexotv100| 久久久久国色av免费看影院| 国产精品初高中害羞小美女文| 亚洲日本丝袜连裤袜办公室| 一区二区三区四区激情| 日产精品久久久久久久性色| 国产乱码精品一区二区三区忘忧草 | 免费在线欧美视频| 成人综合婷婷国产精品久久蜜臀| 91丨国产丨九色丨pron| 欧美精品在线观看一区二区| 久久久久久夜精品精品免费| 亚洲精品网站在线观看| 免费人成在线不卡| 99精品久久久久久| 欧美伦理电影网| 国产欧美日韩另类一区| 亚洲成av人综合在线观看| 国产真实乱子伦精品视频| 成人av资源在线观看| 欧美性大战xxxxx久久久| 欧美一二三四区在线| 亚洲欧洲成人精品av97| 日本vs亚洲vs韩国一区三区 | 欧美日韩精品专区| 久久精品亚洲一区二区三区浴池 | 欧美一区二区人人喊爽| 中文字幕国产一区| 蜜芽一区二区三区| 91丨porny丨国产入口| 精品久久久久久最新网址| 亚洲免费观看在线观看| 国产乱码精品一区二区三区av| 欧美色视频一区| 国产精品福利一区| 国产麻豆欧美日韩一区| 欧美人与z0zoxxxx视频| 亚洲国产综合色| 成人黄色一级视频| 精品成人一区二区三区| 性欧美疯狂xxxxbbbb| 一本到三区不卡视频| 久久久www免费人成精品| 日本在线不卡视频| 在线影院国内精品| 亚洲欧洲美洲综合色网| 国产大陆a不卡| 精品福利一二区| 麻豆国产精品官网| 91精品国产欧美一区二区18 | 欧美情侣在线播放| 亚洲欧美日韩国产综合在线| 国产成人日日夜夜| 精品国产亚洲在线| 六月婷婷色综合| 日韩西西人体444www| 日韩黄色小视频| 欧美老女人在线| 亚洲国产精品一区二区尤物区| 97aⅴ精品视频一二三区| 国产精品国产a级| 成人av片在线观看| 日韩一区日韩二区| av激情亚洲男人天堂| 亚洲欧美一区二区在线观看| 波多野结衣在线一区| 国产精品乱子久久久久| k8久久久一区二区三区|