linux 0.11 ÄÚºËѧϰ block_dev.c
/*
* ¸ÃÎļþµÄÁ½¸öº¯ÊýÊÇΪÁËÏòopenºÍwriteº¯ÊýÌṩ½Ó¿Ú£¬ÊµÏÖÄÚºËÊý¾Ý
* ºÍÓû§Êý¾ÝµÄ½»»¥
*/
/*
* linux/fs/block_dev.c
*
* (C) 1991 Linus Torvalds
*/
#include <errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <asm/segment.h>
#include <asm/system.h>
/*
* | block1 |block 2|block 3|
* ---|-----|------|-------|-------|-------|-------|----
* ---|-----|------|-------|-------|-------|-------|----
* |<--->|<---->|------>|------>|
* offset chars chars1 chars2
* --pos--->|<--------count------->|
*/
/* ÏòÖ¸¶¨É豸´Ó¸ø¶¨Æ«ÒÆ´¦Ð´ÈëÖ¸¶¨³¤¶È×Ö½ÚÊý¾Ý£¬count - Òª´«Ë͵Ä×Ö½ÚÊý */
/* dev - É豸ºÅ£»pos - É豸ÎļþÖÐÆ«ÒÆÁ¿Ö¸Õ룻buf - Óû§µØÖ·¿Õ¼äÖлº³åÇøµØÖ· */
int block_write(int dev, long * pos, char * buf, int count)
{
// ¶ÔÓÚÄÚºËÀ´Ëµ£¬Ð´²Ù×÷ÊÇÏò¸ßËÙ»º³åÇøÖÐдÈëÊý¾Ý£¬Ê²Ã´Ê±ºòÊý¾Ý×îÖÕдÈëÉ豸ÊÇÓɸßËÙ»º³å¹ÜÀí
// ³ÌÐò¾ö¶¨²¢´¦ÀíµÄ¡£ÁíÍ⣬ÒòΪÉ豸ÊÇÒÔ¿éΪµ¥Î»½øÐжÁдµÄ£¬Òò´Ë¶ÔÓÚд¿ªÊ¼Î»Öò»´¦ÓÚ¿éÆðʼ
// ´¦Ê±£¬ÐèÒªÏȽ«¿ªÊ¼×Ö½ÚËùÔÚµÄÕû¸ö¿é¶Á³ö£¬È»ºó½«ÐèҪдµÄÊý¾Ý´Óд¿ªÊ¼´¦ÌîдÂú¸Ã¿é£¬ÔÙ½«Íê
// ÕûµÄÒ»¿éÊý¾ÝдÅÌ£¨¼´½»ÓɸßËÙ»º³å³ÌÐòÈ¥´¦Àí£©
// ÓÉpos µØÖ·»»Ëã³É¿ªÊ¼¶Áд¿éµÄ¿éÐòºÅblock¡£²¢Çó³öÐè¶ÁµÚ1 ×Ö½ÚÔڸÿéÖÐµÄÆ«ÒÆÎ»ÖÃoffset
int block = *pos >> BLOCK_SIZE_BITS;
int offset = *pos & (BLOCK_SIZE-1);
int chars;
int written = 0;
struct buffer_head * bh;
register char * p;
while (count>0) {
chars = BLOCK_SIZE - offset; // ¼ÆËãÔڸÿéÖпÉдÈëµÄ×Ö½ÚÊý
// Èç¹ûÐèҪдÈëµÄ×Ö½ÚÊýÌî²»ÂúÒ»¿é£¬ÔòÖ»Ðèдcount ×Ö½Ú
if (chars > count)
chars=count;
// Èç¹ûÕýºÃҪд1 ¿éÊý¾Ý£¬ÔòÖ±½ÓÉêÇë1 ¿é¸ßËÙ»º³å¿é
if (chars == BLOCK_SIZE)
bh = getblk(dev,block);
// ·ñÔòÐèÒª¶ÁÈ뽫±»Ð޸ĵÄÊý¾Ý¿é£¬²¢Ô¤¶Á
// ÏÂÁ½¿éÊý¾Ý£¬È»ºó½«¿éºÅµÝÔö1
else
bh = breada(dev,block,block+1,block+2,-1);
block++;
Ïà¹ØÎĵµ£º
£¡¢¸ÅÄî
1¡¢DHCP£º¶¯Ì¬Ö÷»úÅäÖÃÐÒé
×÷ÓãºÓÃÓÚ¼ò»¯IPÅä¹ÜÀíµÄTCP/IP±ê×¼¡£
2¡¢DHCP¹¤×÷Á÷³Ì£º
&nb ......
Unix/Linux ½ø³Ì¹ÜÀíÏà¹ØÃüÁî½éÉÜ
½ø³ÌÊDzÙ×÷ϵͳÓÃÓÚ¿ØÖÆÏµÍ³×ÊԴʹÓõÄʵÌå¡£Unix/Linux ½ø³Ì¹ÜÀíÏà¹ØµÄÃüÁîÖ÷ÒªÓÐÒÔϼ¸¸ö£¬ÔÚºóÃæµÄ½Å±¾ÊµÏÖÖлáÓõ½²¿·ÖÃüÁî¡£
ÏÔʾ½ø³ÌÊôÐÔÃüÁî
ps ÃüÁ¸ÃÃüÁîÊÇ×î»ù±¾Í¬Ê±Ò²ÊǷdz£Ç¿´óµÄ½ø³Ì²é¿´ÃüÁÓÃÓÚ±¨¸æ½ø³Ì±êʶ¡¢Óû§¡¢CPU ʱ¼äÏûºÄÒÔ¼°ÆäËûÊôÐÔ¡£ÀûÓÃËü¿ÉÒÔÈ·¶¨ÓÐÄÄÐ ......
/*
* linux/fs/bitmap.c
*
* (C) 1991 Linus Torvalds
*/
/* bitmap.c contains the code that handles the inode and block bitmaps */
#include <string.h>
#include <linux/sched.h>
#include <linux/kernel.h> // һЩÄں˳£Óú¯ÊýµÄÔÐζ¨Òå
......