实验步骤参考
原文链接:https://blog.csdn.net/realfancy/article/details/90112982
说明:这个实验我基本都是按着这位博主来做的,虽然出了一点小问题,但是这位博主写的很好,我就再对这里面的代码说明一下吧,大家如果要看完整的步骤,可以去看这位博主的
实验要求:
实现三个函数
sem_open()
: 创建一个信号量或者打开一个以及存在的信号量sem_wait()
:信号量的P原子操作sem_post()
:信号量的V原子操作sem_unlink()
:删除名为name的信号量
这几个函数都是系统调用函数,有关系统调用的知识可以看这篇文章系统调用原理
在kernel/sem.c
目录下实现这几个函数,我们具体看一下代码
sem_t *sys_sem_open(const char *name,unsigned int value)
{
char kernelname[100];
int isExist = 0;
int i=0;
int name_cnt=0;
while( get_fs_byte(name+name_cnt) != '\0') //get_fs_byte的作用为,在传递进///来的地址处取出一个字节
name_cnt+