인터럽트와 시스템 콜
JeongSeulho
2023년 02월 09일
준비중...
클립보드로 복사
커널모드와 유저모드
- 유저 모드 : 우리가 사용하는 일반적인 프로그램이 실행되는 모드
- 커널 모드 : 커널의 코드가 실행되는 모드
프로그램 실행 중에 어떤 interrupt
가 발생하거나 system call
을 호출하면 커널 모드로 전환
커널 모드는 실행되던 정보를 저장, CPU
에서 interrupt
및 system call
을 처리 즉, 커널 코드가 실행
이후 커널 모드에서 유저 모드로 전환하여 원래 작업을 이어가게 됨
커널은 운영체제의 핵심으로 컴퓨터 시스템 전반을 관리, 감독
또한, 하드웨어와 관련된 작업을 직접 수행
이러한 중요한 부분을 유저가 직접 접근하는 것을 막기위해 별도로 커널모드가 존재
인터럽트
시스템에서 발생하는 다양한 종류의 이벤트
- 전원(power)의 문제가 발생
- IO 작업 완료
- 타이머(멀티 태스킹에서 cpu time 등)
- 0으로 나누기 실행
- 잘못된 메모리 접근 시도
시스템 콜
프로그램이 커널이 제공하는 서비스를 이용하고자 할 때 사용
- 프로세스/스레드 관련(생성, 종료 등)
- 파일 IO
- 네트워크 통신
- 입출력 장치
- 프로세스 사이의 통신
파일을 read하는 예제의 인터럽트와 시스템 콜
t1, t2의 스레드 2개와 싱글 코어 cpu를 가정
- t1에서 파일 read 시스템 콜 호출
- 커널 모드로 전환
- 커널은 파일 읽을 준비
- 파일 읽기는 IO 작업 이므로 t1을
waiting
상태로 전환 - t2를
running
상태로 전환(Context Switching
) - 유저모드로 전환
- 파일 읽기 완료 후 커널은 인터럽트 발생
- 커널모드로 전환
- 커널은 읽은 파일 정보 준비 완료, t1을
ready
상태로 전환 - 유저 모드로 전환
- t2가 정해진
time slice
를 모두 사용하여ready
상태로 전환 - t1이 실행되며 파일 정보 읽기 완료
프로그래밍 언어와 시스템 콜
프로그래밍 언어는 OS의 시스템 콜을 랩핑하여 제공
그에따라 파일 IO, 네트워크 통신, 쓰레드 생성등의 작업을 쉽게 할 수 있도록 함