본문 바로가기
Quality control (Univ. Study)/Operating System

OS(system_call)

by 생각하는 이상훈 2022. 10. 11.
728x90

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이 나왔다.


 

728x90

'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