《Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.6 初始化块设备请求项结构

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

2.6 初始化块设备请求项结构

Linux 0.11将外设分为两类:一类是块设备,另一类是字符设备。块设备将存储空间等分为若干同样大小的称为块的小存储空间,每个块有块号,可以独立、随机读写。硬盘、软盘都是块设备。字符设备以字符为单位进行I/O通信。键盘、早期黑屏命令行显示器都是字符设备。
进程要想与块设备进行沟通,必须经过主机内存中的缓冲区。请求项管理结构request[32]就是操作系统管理缓冲区中的缓冲块与块设备上逻辑块之间读写关系的数据结构。
请求项在进程与块设备进行I/O通信的总体关系如图2-11所示。
操作系统根据所有进程读写任务的轻重缓急,决定缓冲块与块设备之间的读写操作,并把需要操作的缓冲块记录在请求项上,得到读写块设备操作指令后,只根据请求项中的记录来决定当前需要处理哪个设备的哪个逻辑块。

image

执行代码如下:

//代码路径:init/main.c:
void main(void)
{
    …
    blk_dev_init();
    …
}

//代码路径:kernel/blk_dev/blk.h:
…
#define NR_REQUEST    32
struct request {
    int dev;    /* -1 if no request */
    int cmd;    /* READ or WRITE */
    int errors;
    unsigned long sector;
    unsigned long nr_sectors;
    char * buffer;
    struct task_struct * waiting;
    struct buffer_head * bh;
    struct request * next;    //说明request可以构成链表
};
    …

//代码路径:kernel/blk_dev/ll_rw_block.c:
    …
struct request request[NR_REQUEST];    //数组链表
    …
void blk_dev_init(void)
{
    int i;

    for (i=0;i<NR_REQUEST;i++) {
         request[i].dev= -1;        //设置为空闲
         request[i].next= NULL;        //互不挂接
    }
}

注意:request[32]是一个由数组构成的链表;request[i].dev = −1说明了这个请求项还没有具体对应哪个设备,这个标志将来会被用来判断对应该请求项的当前设备是否空闲;request[i].next = NULL说明这时还没有形成请求项队列。初始化的过程和效果如图2-12所示。

image

相关文章
|
8月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
733 1
|
8月前
|
Ubuntu Linux
Ubuntu 23.04 用上 Linux 6.2 内核,预计下放到 22.04 LTS 版本
Linux 6.2 带来了多项内容更新,修复了 AMD 锐龙处理器设备在启用 fTPM 后的运行卡顿问题,还增强了文件系统。
|
7月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
201 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
8月前
|
数据采集 编解码 运维
一文讲完说懂 WowKey -- WowKey 是一款 Linux 类设备的命令行(CLT)运维工具
WowKey 是一款面向 Linux 类设备的命令行运维工具,支持自动登录、批量执行及标准化维护,适用于企业、团队或个人管理多台设备,显著提升运维效率与质量。
|
8月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
900 0
|
8月前
|
Web App开发 缓存 Rust
|
8月前
|
Ubuntu 安全 Linux
Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
本地攻击者可以利用上述漏洞,攻击 Ubuntu 22.10、Ubuntu 22.04、Ubuntu 20.04 LTS 发行版,导致拒绝服务(系统崩溃)或执行任意代码。

热门文章

最新文章