高级OS(二) - 从机制与策略分离分析内核双链表的设计与实现

本文详细探讨了机制与策略分离在操作系统中的应用,重点关注了Linux内核中的双向链表设计。通过对链表的初始化、增删节点和遍历等核心操作的分析,展示了如何在用户态下进行实验,并给出了实验结果。文章还讨论了双向链表在内核模块中的应用及其优势。
摘要由CSDN通过智能技术生成

一.引言-机制与策略分离的现状

机制(mechanism),即需要提供什么样的功能;策略(policy),即怎么样实现这些功能。操作系统是处于硬件和应用程序之间的一个中间层,由此可知,操作系统同时承担了两个角色,一个角色是对硬件资源的管理者,另一个角色则是对应用程序的服务者。对于操作系统和硬件的关系,硬件提供了许多功能,也就是提供了机制,而操作系统屏蔽掉了硬件的细节,给予了具体的实现,也就是提供了策略;对于操作系统和应用程序的关系,操作系统提供了许多功能,也就是提供了机制,而应用程序屏蔽了操作系统的细节,给予了具体的实现,也就是提供了策略。这就是机制与策略分离的思想。此思想不应该局限于分层的概念中,即使同一层次的编程问题,也是可以使用机制与策略分离的思想。现在使用的机制与策略分离思想的方法有将应用按照一个库来编写,还可以将应用程序分为协作的前端和后端进程。具体来说,就如内核list.h中提供了很多双向链表的方法,我们可以进行创建、删除链表等操作。

二.双向链表机制的设计思想分析(分析可以画图)

双向链表,从名字上理解就是双向的,指的是各结点之间的逻辑关系是双向的,可向前或向后查找。双向链表可以在一个结点的前边和后边添加一个新的节点。双向链表可以实现自我删除,删除结点时只需遍历链表找到要删除的结点,将该结点从表中摘除即可。双向链表通过遍历找到存储该数据元素的结点,直接更改其数据域即可。双向链表虽然消耗的内存更多,但是它的性能更好。
双向链表各结点包含以下三部分:
1.指针域(prior):用于指向当前结点的直接前驱结点;
2.数据域:用于存储数据元素;
3.指针域(next):用于指向当前结点的直接后继结点。
在这里插入图片描述
图1.双向链表结构示意图

(1)C语言中,一个基本的双向链表定义:

struct my_list{
   
void *mydata;
struct my_list *next;
struct my_list *prev;
}

(2)Linux内核对双向链表的定义:

struct list_he
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值