📄 buffer.c
字号:
#include "../include/fs/fs.h"
#include "../include/s3c2410/cpu.h"
/*
* 文件系统中的大部分代码是运行在system级别下的,所以我们必须考虑竞争条件。
* 或许你要问为什么不跟其他系统调用一样运行在SVC级别下?那样就不用考虑竞争
* 条件啦。这是因为考虑到任务切换的公平性问题,我们知道在SVC下的程序是不可
* 中断的,一个任务一旦运行在SVC级别下,那他就拥有了所有的系统资源,对于临
* 界区域的访问,进入SVC级别确实是个好注意,毕竟对临界区域的操作一般只是读
* 取判断或是赋值,这些操作耗时很小,进入SVC级别后系统很快就能恢复到User级
* 别,这样不会影响任务切换的速度。但是对文件系统的块操作来说就不是这么回事
* 了,块操作涉及到搜索,甚至是遍历,又涉及到IO,这些操作是十分耗时的,如果
* 让一个任务在SVC模式下进行这些操作,那其他任务将等待很长的时间才能被切换
* 到,这样就大大降低了系统的公平性,所以我们必须让这些耗时的同时又是需要被
* 保护的操作运行在system级别,这样就能照顾到任务调度的公平性,又考虑到安全性,
* 一举两得,比较郁闷的是我们必须考虑烦人的竞争条件问题... :(
*/
int buffer_init(unsigned int buffer_start,
unsigned int buffer_end)
{
}
struct buffer_head* gblk(int dev,int block)
{
}
struct buffer_head* bread(int dev,int block)
{
/*struct buffer_head* bh;
ENTER_CRITICAL;
bh=gblk(dev,block);
if(bh==0)
panic("bread: gblk return NULL.\n");
if(bh->b_uptodate)
{
EXIT_CRITICAL;
return bh;
}
EXIT_CRITICAL;*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -