728x90
반응형
User mode
- 우리가 개발하는 프로그램은 일반적으로 유저 모드에서 실행
User mode -> Kernel mode
- 프로그램 실행 중에 인터럽트가 발생하거나 시스템 콜을 호출하게 되면 커널 모드로 전환
Kernel mode
- 프로그램의 현재 CPU상태를 저장함.
- 그래야 나중에 다시 이어서 실행을 할 수 있기 때문에
- 커널이 인터럽트나 시스템콜을 직접 처리
- 즉, CPU에서 커널 코드가 실행됨
- 처리가 완료되면 중단됐던 프로그램의 CPU상태를 복원
Kernel mode -> User mode
- 복원이 되면 다시 통제권을 프로그램에게 반환
User mode
- 프로그램이 이어서 실행됨.
커널(kernuel)
- 운영체제의 핵심
- 시스템의 전반을 관리/감동하는 역할
- 하드웨어와 관련된 작업을 직접 수행
Kernel mode를 만든 이유
- 시스템을 보호하기 위해서
- 커널모드가 없다면 우리가 개발한 프로그램이 함부로 하드웨어를 다 점유해서 사용하고 그래서 다른 프로세스가 영향을 받게되면서 컴퓨터 시스템이 붕괴될 수 있기 때문에
- 하드웨어와 관련된 부분은 커널이 담당
- 개발자가 작성한 프로그램은 커널을 통해 시스템의 기능이나 하드웨어 사용해서 시스템을 안정적으로 동작해줌.
Interrupt
- 시스템에서 발생한 다양한 종류의 이벤트 혹은 그런 이벤트를 알리는 메커니즘
인터럽트 종류
- 전원(power)에 문제가 생겼을 때
- I/O 작업이 완료됐을 때
- 시간이 다 됐을 때(timer 관련)
- 0으로 나눴을 때
- 잘못된 메모리 공간에 접근을 시도할 때
인터럽트가 발생하면 CPU에서는 즉각적으로 인터럽트를 처리를 위해 커널 코드를 커널 모드에서 실행
System call
- 프로그램이 OS 커널이 제공하는 서비스를 이용하고 싶을 때 시스템 콜을 통해 실행
시스템 콜의 종류
- 프로세스/스레드 관련
- 파일 I/O 관련
- 소켓 관련
- 장치 관련
- 프로세스 통신 관련
시스템 콜이 발생하면 해당 커널 코드가 커널 모드에서 실행
시스템 콜 & 인터럽트 예시 : 파일 read
스레드 A과 스레드 B가 있고 CPU는 싱글 코어라고 가정
- 스레드 A는 CPU에서 실행(running)되고 있고, 스레드 B는 ready상태로 CPU에서 실행되기를 기다리는 중
- 스레드 A는 유저 모드에서 실행하고 있다가 파일을 read하기 위해서 read라는 시스템 콜을 호출
- 스레드 A는 커널모드로 전환 그러면 커널모드는 스레드 A의 CPU 상태를 저장
- read는 ssd로부터 파일을 읽어오는 작업이기 때문에 파일의 위치를 찾아서 파일로부터 읽으려는 내용을 버퍼에서 읽을 수 있도록 중지시키는 작업을 한다.(파일을 읽을 준비를 시킴)
- 스레드 A는 파일을 읽을 준비가 될때까지 기다려야 한다. 그래서 스레드 A의 상태를 waiting 상태로 바꿈.
- 그러면 CPU에서는 동작하는 것이 없어서 스케줄링을 해서 CPU가 계속 일을 할 수 있도록한다.
- 스레드 B를 ready상태에서 running상태로 바꿈.(커널모드에서 진행)
- 커널모드에서 유저모드로 전환. 이제 스레드 B가 CPU점유
- SSD에서 스레드 A이 파일을 읽을 준비가 되었다고 인터럽트로 통해 알려준다.
- 인터럽트가 발생하면 커널 모드로 다시 전환된다.
- 커널모드에서는 스레드 B의 CPU 상태를 저장하고, 스레드 A의 상태를 ready상태로 바꾼다.
- 스레드 B의 CPU 상태를 복원하면서 다시 이어서 스레드 B는 이어서 작업을 한다.
- 스레드 B가 CPU사용해야하는 시간(time slice)을 다 사용해서 다시 인터럽트가 발생한다.
- 커널 모드로 전환하고 스레드 B의 CPU 상태를 저장하고 스레드 B는 ready 상태가 된다.
- 스레드 A가 running 상태로 되면서 CPU 상태를 복원한다.
- 다시 커널모드에서 유저모드로 전환되면서 스레드 A가 이어서 실행하게 되고 파일을 읽을 준비가 되었기 때문에 파일을 읽는 작업을 수행
하드웨어 혹은 시스템 관련 기능은 어떤 프로그램이라도 반드시 시스템 콜을 통해서만 사용 가능하다.
하지만 보통 우리는 개발할 때 직접 OS 시스템 콜을 사용한 적이 없다.
그럼에도 지금까지 파일 I/O, 네트워크 I/O, 프로세스/스레드 관련 작업을 해왔다.
이것이 가능한 것은
우리가 사용하는 프로그래밍 언어들이 시스템 콜을 포장하여 간접적으로 사용할 수 있도록 제공.
728x90
반응형