반응형
코드를 분석하기전!
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 명령을 통해 파일 크기 확인)
반응형
'혼자 공부하는 것들 > 운영체제' 카테고리의 다른 글
[운영체제] 스레드(Thread) + 실습을 통해 직접 깨우치기! 프로세스와의 차이점? (2) | 2020.09.28 |
---|---|
[운영체제] 프로세스 상태 +실습을 통해 직접 깨우치기! (0) | 2020.09.28 |
[운영체제] fork 실습 -2 (2) | 2020.09.27 |
[운영체제] fork 실습 -1 (0) | 2020.09.27 |
[운영체제] CPU 모드 관찰 (0) | 2020.09.27 |
댓글