《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.3 设置虚拟盘空间并初始化-阿里云开发者社区

开发者社区> 华章计算机> 正文

《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.3 设置虚拟盘空间并初始化

简介: 本节书摘来自华章计算机《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》一书中的第2章,第2.3节,作者:新设计团队著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
+关注继续查看

2.3 设置虚拟盘空间并初始化

接下来将对外设中的虚拟盘区进行设置。检查makefile文件中“虚拟盘使用标志”是否设置,以此确定本系统是否使用了虚拟盘。我们设定本书所用计算机有16 MB的内存,有虚拟盘,且将虚拟盘大小设置为2 MB。操作系统从缓冲区的末端起开辟2 MB内存空间设置为虚拟盘,主内存起始位置后移2 MB至虚拟盘的末端。图2-3展示了设置完成后的物理内存的规划格局。

image

调用rd_init()函数,开始对虚拟盘进行设置,具体执行代码如下:

//代码路径:init/main.c:
void main(void)
{
    …
#ifdef RAMDISK
    main_memory_start += rd_init(main_memory_start, RAMDISK*1024);
#endif
    …
}
//代码路径:kernel/blk_drv/blk.h:
    …
#define NR_BLK_DEV    7
    …
struct blk_dev_struct {
    void (*request_fn)(void);
    struct request * current_request;
};
    …
#if (MAJOR_NR== 1)
    …
#define DEVICE_REQUEST do_rd_request
    …

//代码路径:kernel/blk_drv/ll_rw_blk.c:        //ll可以理解为low level
    …
struct blk_dev_struct blk_dev[NR_BLK_DEV]= {
    { NULL, NULL },        /* no_dev */
    { NULL, NULL },        /* dev mem */
    { NULL, NULL },        /* dev fd */
    { NULL, NULL },        /* dev hd */
    { NULL, NULL },        /* dev ttyx */
    { NULL, NULL },        /* dev tty */
    { NULL, NULL }            /* dev lp */
};
…

//代码路径:kernel/ramdisk.c:
…
#define MAJOR_NR 1
    …
long rd_init(long mem_start, int length)//hd_init()、floppy_init()与此类似
{
    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';        //初始化为0
    return(length);
}

在rd_init()函数中,先要将虚拟盘区的请求项处理函数do_rd_request()与图2-4中的请求项函数控制结构blk_dev[7]的第二项挂接。blk_dev[7]的主要功能是将某一类设备与它对应的请求项处理函数挂钩。可以看出我们讨论的操作系统最多可以管理6类设备。请求项将在2.6节中详细解释。这个挂接动作意味着以后内核能够通过调用do_rd_request函数处理与虚拟盘相关的请求项操作。挂接之后,将虚拟盘所在的内存区域全部初始化为0。图2-4表示了rd_init()函数的执行效果。

image

最后将虚拟盘区的长度值返回。这个返回值将用来重新设置主内存区的起始位置。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties
你需要的是什么,直接评论留言。 获取更多资源加微信公众号“Java帮帮” (是公众号,不是微信好友哦) 还有“Java帮帮”今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:登录注册IO版本案例(掌握) 要求,对着写一遍。 cn.i
1717 0
Linux操作系统环境下jdk的配置和tomcat中web项目部署(从U盘中)
1.在自己用户下创建想要放java 的jdk和tomcat的目录,并用超级用户给与操作权限:(例为jtom目录下创建java和tomcat目录):   (1).登录root用户 :su   (2).进入我的文档目录:cd  /                                         ls  (3).在"/boot"下创建 jtom目录: mkdir  
1561 0
《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.11 初始化硬盘
本节书摘来自华章计算机《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》一书中的第2章,第2.11节,作者:新设计团队著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
787 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载