Compare commits

..

1 Commits

Author SHA1 Message Date
mp6sgfx3h 185e9d48ab ADD file via upload
3 years ago

@ -1,47 +1,22 @@
#include <unistd.h>
//#include <linux/sys.h>
//#include <sys.h>
#include <errno.h>
#include <string.h>
#include<asm/segment.h>
#include <linux/kernel.h>
#include <signal.h>
int sys_pipe2(void){
return 0;
}
int sys_execve2(const char * path, char * argv[], char * envp[]){
printk("hello,welcome\n");
return 0;
}
int sys_getdents(unsigned int fd, struct linux_dirent *drip, unsigned int count ){
printk("hello,welcome\n");
return 0;
}
char sys_name[24];//系统内核的内存区域
void handler(int signo)
int sys_execve2(const char * name)
{
printk("yes");
return 0;
}
int sys_sleep(unsigned int seconds){
printk("hello,welcome\n");
struct sigaction act,oact;
act.sa_handler = handler;
act.sa_flags = 0;
sys_signal(SIGALRM,SIG_IGN,NULL);
sys_sigaction(SIGALRM,&act,&oact);
sys_alarm(seconds);
pause();
int ret = sys_alarm(0);
sys_sigaction(SIGALRM,&oact,NULL);
return ret;
}
long sys_getcwd(char * buf, size_t size){
printk("hello,welcome\n");
int sys_getdents(char * name,unsigned int size)
{
printk("yes2");
return 0;
}

@ -4,14 +4,6 @@
二、实现给定的四个函数
1、sleep
具体实现思路:
1>注册SIGALRM信号的处理函数
2>调用alarm(nsecs)设定闹钟;
3>调⽤pause等待,内核切换到别的进程运行;
4>nsecs秒之后,闹钟超时,内核发SIGALRM给这个 进程 ;
5>从内核态返回这个进程的⽤户态之前处理未决信 号,发现有SIGALRM信号,其处理函数是sig_alrm;
6> 切换到用户态执行sig_alrm函数,进⼊sig_alrm 函数时SIGALRM信号被⾃动屏蔽,从sig_alrm函数 返回SIGALRM信 号⾃动解除屏蔽。然后⾃动执⾏ 系统调用sigreturn再次进入内核,再返回用户态继续 执行进程的主控制流程(main函数调⽤的mysleep 函数)
7>pause函数返回-1,然后调⽤alarm(0)取消闹钟, 调⽤sigaction恢复SIGALRM信号以前的处理动作 。
2、getcwd
3、getdents
4、execve2

Loading…
Cancel
Save