- 지금까찌 프로세스를 이해하기 위한 다양한 개념들을 배웠다.
- 실제 코드를 보면서 그동안 익힌 프로세스 개념들을 복습해보자.
1. 예제 코드를 통한 프로세스의 이해
#Include <unistd.h>
#Include <sys/types.h>
#Include <sys/stat.h>
#Include <fcntl.h>
Int main()
{
int fd;
fd = open("data.txt".O_RDONLY);
if(fd == -1)
{
printf("Error: can not open file\n");
/* 파일을 열지 못하므로 그냥 종료 */
return 1;
}
else
{
printf("File opened and now close_\n");
close(fd);
return();
}
}
a) 위의 소스코드가 실행되기까지의 과정
- 소스코드가 컴파일 된다.
- 컴파일된 소스코드로 이루어진 실행파일이 생성된다.
- 쉘에서 OS에게 해당 파일의 실행요청을 한다. (시스템 콜)
- 프로세스의 TEXT 메모리에 컴파일된 소스코드가 들어간다. (프로세스의 메모리 구조)
- 해당 프로세스는 ready 상태로 전환된다.
- 스케줄러의 방식에 따라 인터럽트가 발생한다.
- 프로세스가 실행된다. (컨텍스트 스위칭, PCB, SP, PC)
b) 프로세스가 실행된 후에는 어떻게 될까?
- 먼저, open() 이라는 시스템 콜을 이용하여 파일을 가져온다.
- 시스템 콜은 소스코드에 등록해놓은 헤더파일에 들어있는데, 이를 사용하는 과정은 다음과 같다.
- 시스템 콜이 호출되면, 소스코드에 명시된 파일을 불러오기 위해 DMA를 통해 저장매체에 접근한다.
- 저장매체에 접근하여 파일을 불러오는 과정이 완료되기 까지 다음 코드는 실행되지 않는다.
- 저장매체에 접근하여 파일을 불러오는데 걸리는 시간은 상대적으로 오래 걸린다. (아래 사진참고)
- 효율적인 자원(CPU) 사용을 위하여 파일을 불러오는 동안 해당 프로세스는 waiting 상태로 전환된다.
- 컨텍스트 스위칭이 발생하고, 다른 프로세스가 CPU를 할당 받아 사용한다.
- 파일을 불러오는 과정이 완료되고나면, 컨텍스트 스위칭을 위해 인터럽트가 발생한다. (프로세스 상태 = ready)
- 컨텍스트 스위칭이 완료되면, 프로세스가 재실행 된다. (프로세스 상태 = running)
- 소스코드가 다 읽히고 나면 프로세스는 종료된다. (프로세스 상태 = terminated)
'컴퓨터공학기초 개념 > 운영체제' 카테고리의 다른 글
25. 스레드의 장단점 (0) | 2021.05.04 |
---|---|
24. 스레드란? (thread 개념) (0) | 2021.04.29 |
22. 프로세스 - IPC 기법(signal, socket) (0) | 2021.04.27 |
21. 프로세스 - IPC기법(공유메모리) (0) | 2021.04.26 |
20. 프로세스 - IPC 기법(메세지 큐) (0) | 2021.04.23 |
댓글