본문 바로가기
컴퓨터공학기초 개념/운영체제

23. 코드를 통한 프로세스 실행과정의 이해

by devraphy 2021. 4. 28.

- 지금까찌 프로세스를 이해하기 위한 다양한 개념들을 배웠다.

- 실제 코드를 보면서 그동안 익힌 프로세스 개념들을 복습해보자. 

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) 위의 소스코드가 실행되기까지의 과정

  1. 소스코드가 컴파일 된다. 
  2. 컴파일된 소스코드로 이루어진 실행파일이 생성된다. 
  3. 쉘에서 OS에게 해당 파일의 실행요청을 한다. (시스템 콜)
  4. 프로세스의 TEXT 메모리에 컴파일된 소스코드가 들어간다. (프로세스의 메모리 구조)
  5. 해당 프로세스는 ready 상태로 전환된다. 
  6. 스케줄러의 방식에 따라 인터럽트가 발생한다.
  7. 프로세스가 실행된다. (컨텍스트 스위칭, PCB, SP, PC) 

 

b) 프로세스가 실행된 후에는 어떻게 될까?

 

  • 먼저, open() 이라는 시스템 콜을 이용하여 파일을 가져온다. 
  • 시스템 콜은 소스코드에 등록해놓은 헤더파일에 들어있는데, 이를 사용하는 과정은 다음과 같다.

 

  • 시스템 콜이 호출되면, 소스코드에 명시된 파일을 불러오기 위해 DMA를 통해 저장매체에 접근한다. 
  • 저장매체에 접근하여 파일을 불러오는 과정이 완료되기 까지 다음 코드는 실행되지 않는다.
  • 저장매체에 접근하여 파일을 불러오는데 걸리는 시간은 상대적으로 오래 걸린다. (아래 사진참고)

  • 효율적인 자원(CPU) 사용을 위하여 파일을 불러오는 동안 해당 프로세스는 waiting 상태로 전환된다. 
  • 컨텍스트 스위칭이 발생하고, 다른 프로세스가 CPU를 할당 받아 사용한다. 
  • 파일을 불러오는 과정이 완료되고나면, 컨텍스트 스위칭을 위해 인터럽트가 발생한다. (프로세스 상태 = ready)
  • 컨텍스트 스위칭이 완료되면, 프로세스가 재실행 된다. (프로세스 상태 = running)
  • 소스코드가 다 읽히고 나면 프로세스는 종료된다. (프로세스 상태 = terminated)

댓글