📄 sched.h.txt
字号:
this is writen by netbear in nankai university
all copyright reserved
you can copy and modify it,but you cant use it to make profit
****************关于等待队列的一系列处理数***********************
对wait_queue的使用的函数和宏都定义在这个文件中,
wait_event
(2)wait_event_interruptible:(参数说明wq是wait_queue_head_t型的变量,condition是一个判断。),
将当前的进程(current)放入一个wait_queue_t型变量中.
在用init_waitque_entry对wait_queue_t型变量进行初始化,
然后将这个变量连接到一个wait_queue_head_t的参数变量中。
然后进入无限循环,将当前的进程的状态进行设置,设置是TASK_INTERRUPTIBLE型的。
然后判断condition条件,如果条件是true,就跳出循环,
否则判断信号,如果允许的话就进行进程调度(schedule函数),轮到自己的时候再进行循环,判断条件,以此类推,直到条件满足。
如果条件满足,跳出循环,奖进程的状态设置位可运行的TASK_RUNNING,最后从wq链表中把waitqueue移走。
(3)wait_event函数和wait_envent_interruptible函数基本一致,只是这个函数对应的是不可中断的等待,两者的区别仅仅是在循环中不用设置信号量。
(4):#define wake_up(x) __wake_up((x),T)
定义唤醒函数,其参数就是一个wait_queue_head_t型的变量,其中__wake_up函数定义在/kernel/sched.c中。
*****************************************************************************
*********************可运行队列的一些处理函数******************************
(1):static inline int task_on_runqueue(struct task_struct *p)
验证进程p是不是在可运行队列中。
其实只是检验了一下p结构中run_list.next是否为空,因为这是一个双链表结构,如果进程p在可运行队列中,那么它的next指针一定指向另一个结构。
*****************************************************************************
//打开的文件列表,其中NR_OPEN_DEFAULT就是默认的打开的最大文件个数
struct files_struct {
atomic_t count;
rwlock_t file_lock; /* Protects all the below members. Nests insid tsk->alloc_lock */
int max_fds;
int max_fdset;
int next_fd;
struct file ** fd; /* current fd array */
fd_set *close_on_exec;
fd_set *open_fds;
fd_set close_on_exec_init;
fd_set open_fds_init;
struct file * fd_array[NR_OPEN_DEFAULT];
};
**********************验证是否当前的进程是否具有相应的cap权限*****************
相关文件capability.h
static inline int capable(int cap)
{
if (cap_raised(current->cap_effective, cap)) //???
{
current->flags |= PF_SUPERPRIV;
return 1;
}
return 0;
}
**********************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -