System_call / Interrupt (2)
0부터 326번 까지 총 327개의 system calls를 확인해볼 수 있었다.
Exit은 1번 fork는 2번 execve는 11번 read는 3번 write는 4번
Wait4는 114번
Mkdir는 39번 이었다.
sys_ni_syscall의 call number는 17번이었고 -ENOSYS라는 무의미한 내용을 return하는 걸로보아 아무런 기능을 하지 않는 system call이다.
system call 함수 sys_write를 modify 해본다.
system call 함수는 linux-2.6.25.10/fs/read_write.c에 들어가서 접근할 수 있었다.
length가 17인 string을 print할때 "length 17 string found"라는 멘트를 출력하도록 하였다.
1234567891234567\n을 출력하는 ex1파일을 만들어주고 실행해보니 원하는 내용이 제대로 출력되었다.
처음에는 원하는 멘트가 출력이 안되었는데 echo 8 > /proc/sys/kernel/printk를 통해 log level을 낮추고 다시 실행하니 원하는 멘트가 제대로 출력이 되었다.
원래는 write(1, "hi", 2);와 같은 방법으로 system call 함수 write를 호출할 수 있는데 syscall() 함수를 이용하여 새로운 방법으로 출력을 해보았다.
파일을 실행하니 제대로 hi가 출력이되었다.
17번 call number를 가진 my_sys_call을 만들어주었다.
/linux-2.6.25.10/fs/read_write.c에서 my_sys_call함수를 정의해주었다.
그후에 syscall함수를 통해 호출해주니 제대로 출력이되었다.
31번 system_call에 adder함수를 만들었다.
read_write.c 파일에서 시스템콜 sys_adder에 해당하는 함수를 만들어주었다.
ex3.c파일에 31번 system call을 하고 더할 숫자 두개를 입력해주는 main문을 작성해주었다.
파일을 실행시켜주니 4와9를 더한 값인 13이 나왔다.
'Quality control (Univ. Study) > Operating System' 카테고리의 다른 글
OS (fork) (0) | 2022.11.10 |
---|---|
OS(process id) (1) | 2022.11.05 |
OS(interrupt) (0) | 2022.11.05 |
OS(modificating kernel) (0) | 2022.10.07 |
OS (linux, start_kernel) (1) | 2022.10.03 |