눈팅하는 게임개발자 블로그

시스템 호출 본문

공부한거/운영체제

시스템 호출

Palamore 2020. 9. 22. 18:06

시스템 호출은 사용자 응용 프로그램이 운영체제에 무언가를 요청할 때 사용하는 인터페이스이다.

 

사용자 공간과 커널 공간

프로세스에게 할당되는 메모리 공간은 사용자 공간과 커널 공간으로 나뉘어져 있다.

사용자 공간은 각각의 프로세스에 할당된 공간이며. (프로세스의 개수만큼 존재한다.)

커널 공간은 운영체제(커널)를 위해 할당된 공간으로 한 운영체제 내의 모든 프로세스가 자신에게 할당 된

커널 공간이 있는 것처럼 운영되지만 실제로 커널 공간은 한 개만 존재하고, 모든 프로세스가 이를 공유한다.

CPU 내에 모드 레지스터라는 것이 존재하며, 이 레지스터의 비트가 0일 경우 사용자 모드.

1일 경우 커널 모드가 되는데.

표준 라이브러리의 코드가 실행될 경우 모드 레지스터의 비트가 0인 상태로

프로세스가 사용자 공간 내에서만 실행되며 커널 공간에 액세스 할 수 없다.

시스템 호출 라이브러리의 코드가 실행될 경우 시스템 호출이 발생하여 모드 레지스터의 비트가 1이 된다.

해당 모드 레지스터의 비트가 1인 경우 CPU는 특권 명령을 사용할 수 있게 되고

커널 공간의 메모리에 액세스 할 수 있게 된다.

 

시스템 호출 과정

1. 시스템 호출 라이브러리의 함수가 실행되어 시스템 호출이 발생.

2. 시스템 호출 함수를 위한 매개변수를 저장, 해당 시스템 호출 함수를 위한 번호 저장.

3. 커널 공간으로 진입하기 위해 CPU 명령 syscall 실행

4. 시스템 호출(trap) 발생, CPU의 모드 레지스터를 커널 모드로 변경(비트가 1로 변경)

5. 현재 CPU 상태(Context)를 저장.

6. CPU의 레지스터를 읽어 시스템 호출 번호를 가져와서 이에 해당하는 커널 함수의 주소를 찾아내어 커널 함수를 호출.

7. 디스크 장치를 제어하여 파일을 읽는다(해당 커널 함수를 실행)

8. 커널 스택으로부터 CPU로 레지스터 복귀. 

9. 사용자 공간으로 되돌아가기 위해 CPU는 다시 모드 레지스터를 사용자 모드로 변경(비트가 0으로 번경)

10 ~ 11. 호출되었던 곳으로 리턴. (커널 공간 > 시스템 호출 라이브러리 > 응용 프로그램)

 

 

'공부한거 > 운영체제' 카테고리의 다른 글

CPU 스케줄링  (0) 2020.09.23
Process  (0) 2020.09.22
Thread  (0) 2020.09.22
Context Switching  (0) 2020.09.22
컴퓨터 시스템  (0) 2020.09.22