본문 바로가기
혼자 공부하는 것들/운영체제

[운영체제] system call

by applepick 2020. 9. 27.
반응형

코드를 분석하기전!

system call이 무엇인지 알고 넘어가자!

 

system call이란?

리눅스 커널과 같은 운영 체제에서 응용 프로그램의 저수준 입출력 함수가 실행되면, 해당 실시간 라이브러리 함수에 의해 소프트웨어 인터럽트가 실행된다. 이것을 시스템 콜(system call)이라고 하고, 함수의 기능에 따라 드라이버를 구별하고 드라이버 내의 함수를 지정함과 동시에 데이터를 레지스터를 통해 넘겨준다.


 

print_ch.c파일

#include <stdio.h>
int main()
{
	char buff[ ] = "This is a sample file.\n";
	int nb;
	int i;
	nb = 24;
	for (i = 0; i < nb; i++)
		printf("%c", buff[i]);
}

lowlevel_read.c 파일

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
	int fd;
	char buff[1024];//버퍼크기
	int nb;	
	int i;
	fd = open("myFile.txt", O_RDONLY);
	nb = 1024; //읽고자 하는 데이터 크기(바이트)
	read(fd, buff, nb);
	for (i = 0; i < nb; i++)
		printf("%c", buff[i]);
}

 1. C 프로그램에서 system call 을 유발하는 문장은 무엇인가? (모두 열거)

(read를 호출하는 부분)

fd = open("myFile.txt", O_RDONLY);

read(fd, buff, nb);

 

printf("%c", buff[i]);

 

2. 어셈블리 코드에서 system call로 이어지게 될 문장은 어떤 것인가? (모두 열거)

        call    open

        call    read

        call    putchar

        call    __stack_chk_fail

 

3. Kernel mode  user mode에서 실행되는 시간은 각각 얼마인가?

real    0m0.180s

user    0m0.152s

sys     0m0.028s

(time ./lowlevel_read)

프로그램에서 버퍼크기는 자신이 만든 myFile.txt 크기 만큼 설정

(ls -l 명령을 통해 파일 크기 확인)

 

반응형

댓글