비트(bit)주세요

시스템 호출 본문

CS/운영체제

시스템 호출

yglee730 2021. 8. 1. 23:36
728x90

시스템 호출 (System Call)

운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스

 

Q : 왜 사용해요?

A : 운영체제는 사용자가 함부로 사용하면 문제가 될만한 명령들을 막아놓았는데

    사용자가 이러한 명령들을 사용하기 위해서 시스템 호출을 사용합니다.

       ex) 프로세스의 실행, 종료, I/O 작업

 

 

유저 모드 (User Mode) 커널 모드 (Kernel Mode)
- 사용자 애플리케이션 실행
- 하드웨어 직접 접근 불가
- 시스템 호출 시, 일시적으로 커널모드로 전환
- 모든 시스템 메모리에 접근 가능
- 모든 CPU 명령 실행 가능

 

시스템 호출의 분류(1) - 프로세스 제어

중단(abort), 종료(exit)
Load, execute
create process, terminate process
get process attribute, set process attribute
wait time, wait event, signal event
allocate and free memory

시스템 호출의 분류(2) - 파일 조작

create, delete file
open, close
read, write, reposition
get file attribute, set file attribute

시스템 호출의 분류(3) - 장치 관리

- 장치 요청(request), 장치 양도(release), 개폐(open/close)
- reposition
- 입출력 장치는 단순히 특정 파일 이름으로 간주

시스템 호출의 분류(4) - 정보 유지

- 날짜/시간 알려주는 시스템 호출
- 사용자 수, 운영체제의 버전 번호, 기억 공간의 양
- 운영되고 있는 모든 작업과 처리에 관한 정보
  (get process attribute, set process attribute)

시스템 호출의 분류(5) - 통신

create, delete communication connection
send, receive message
transfer status information
attach or detach remote device

 

간단하게 open()을 사용해보는 코드를 작성하겠습니다.

test.txt

파일이 열려서 출력된 모습입니다.

 

시스템 호출의 처리 방식

① 응용프로그램에서 소프트웨어 인터럽트가 일어납니다.

      -> 인터럽트가 일어나면, IDTR이라는 레지스터에 IDT를 가르키는 위치가 명시되어 있습니다.

 

② C 라이브러리(libc.a)에서 기능에 따른 시스템콜 고유번호가 레지스터에 저장되고,

    0x80 인터럽트를 겁니다.

      -> 시스템 호출은 0x80 인터럽트입니다.

 

③ 커널은 IDT 엔트리를 참고하여 알맞은 서비스 루틴을 수행합니다.

 

※ IDT : Interrupt Descriptor Table

출처 : https://plummmm.tistory.com/369

IDTR 레지스터에 0x80이 저장되었습니다.

eax 레지스터에 4가 저장되었습니다.

 

IDT가 IDTR 레지스터 값을 보고, 이게 시스템 호출이구나 라는 것을 인식합니다.

eax 레지스터값이 4이니까, 커널이 System call table을 참조하여 4번으로 갑니다.

4번으로 가니까 write() 함수가 있습니다.

write() 함수를 호출합니다. 

'CS > 운영체제' 카테고리의 다른 글

커널과 쉘  (0) 2021.07.29
운영체제의 기능  (0) 2021.07.27
운영체제의 부팅 절차  (0) 2021.07.27
운영체제의 종류  (0) 2021.07.27
운영체제는?  (0) 2021.07.27