ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [운영체제] 1. 커널, 이중 모드, 시스템 호출
    전공 지식/운영체제 (Operating System) 2023. 8. 7. 22:46

    지난 포스트에서 설명했듯, 운영체제는 메모리 내 커널 영역에 적재되어 실행된다.

    다르게 말하면 운영체제가 설치된 모든 기기엔 커널이 있다.

    어떤 커널을 사용하는지에 따라 프로그램이 하드웨어를 이용하는 방식이 달라지고, 컴퓨터 전체의 성능이 바뀔 수도 있다.

    즉, 운영체제가 중요한 만큼 커널도 무지하게 중요하다.

     

    대부분의 운영체제 전공서적에서는 운영체제의 커널에 대해 설명한다. 해당 책들을 보면 '운영체제'라고 지칭을 했는데 그게 '커널'일 수도 있는 것이다. 그러니 포스트를 읽으면서 '어 이건 엄밀히 말하면 OS가 아니라 커널 아닌가?' 라고 생각할 수 있는데, 그 생각이 맞다.

    즉, 앞으로 편의상 커널을 지칭할 때 운영체제라고 지칭할 수도 있다.

     

    그러나 운영체제가 제공하는 것 중 커널에 포함되지 않는 것도 있다. 대표적인 예시가 UI이다.

    UI는 다들 아는 User Interface인데, 바탕화면이나 각종 버튼 등 사용자가 컴퓨터와 상호작용하는 부분을 의미한다.

    이 UI의 종류에는 GUI와 CLI가 있다. GUI는 그래픽 유저 인터페이스고, CLI는 커맨드 라인 인터페이스이다.

    GUI는 그래픽 기반 UI인 것이고, CLI는 명령어 기반 인터페이스라고 보면 된다.

    GUI는 마우스나 터치를 통해서 상호작용하는 그런 일반인들이 많이 사용하는 형태인 것이고, CLI는 터미널에 명령어를 넣어서 상호작용하는 형태라고 보면 될 것이다.

     

    다시 본론으로 돌아가서 운영체제의 기능에 대해 이야기를 더 해 보겠다.

    우선, 사용자가 실행하는 응용 프로그램은 하드웨어 자원에 직접 접근하지 못한다. 왜냐하면 운영체제가 직접 접근을 방지해 자원을 보호하기 때문이다. 만약 응용 프로그램이 자원에 직접 접근하게 되면 운영체제에서 자원 관리를 하기가 굉장히 까다로워지고, 동시에 응용 프로그램의 작은 오류에 컴퓨터 시스템 자체가 큰 타격을 입을 수 있다.

    그래서 운영체제는 응용 프로그램들이 자원에 접근하려고 할 때 운영체제를 통해서 접근하게 한다. 응용 프로그램이 자원을 이용하고 싶으면 운영체제에게 자원 이용을 요청하고, 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근해 요청한 작업을 수행한다.

    이러한 역할과 운영은 운영체제의 이중 모드로 구현된다. 이중 모드란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드커널 모드로 구분하는 것이다. CPU는 명령어를 사용자 모드로써 실행할 수도 있고, 커널 모드로써 실행할 수도 있다.

     

    우선 사용자 모드는 운영체제 서비스를 제공받을 수 없는 모드라고 보면 된다. 다르게 말하면 커널 영역의 코드를 실행할 수 없는 것이다.

    일반적인 응용 프로그램은 사용자 모드로 실행되고, 사용자 모드로 실행 중인 CPU는 하드웨어 자원에 접근하는 명령어를 실행할 수 없다. 즉, 자원에 접근할 수 없는 것이다.

    반면에 커널 모드는 운영체제 서비스를 제공받을 수 있는 모드이다. 사용자 모드와는 다르게 커널 영역의 코드를 실행할 수 있다.

    CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 포함한 모든 명령어를 사용할 수 있고, 자원에 접근할 수 있는 것이다.

     

    그렇다면 사용자 모드로 실행되는 프로그램이 자원에 접근하려면 어떻게 해야 할까?

    운영체제에 요청을 보내서 커널 모드로 전환하면 된다. 이때 이 요청을 시스템 호출(System Call)이라고 한다.

    즉, 사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하고 운영체제 서비스를 받는 것이다.

    시스템 호출은 일종의 인터럽트인데, 입출력장치에 의해 발생하는 것이 아니라 명령어에 의해 발생하는 것이므로 소프트웨어 인터럽트라고 한다.

    그래서 CPU가 시스템 호출을 처리하는 순서는 인터럽트 처리 순서와 유사하다. 순서를 숫자를 붙여서 설명하면-

    1. 시스템 호출을 발생시키는 명령어가 실행됨

    2. CPU는 지금까지의 작업을 백업함

    3. 커널 영역 내에 시스템 호출을 수행하는 코드를 실행함

    4. 다시 기존에 실행하던 응용 프로그램으로 복귀해 실행을 계속함

     

    이걸 커널과 사용자 모드의 개념으로 다시 설명을 하면,

    1. 커널 모드로 전환

    2. 운영체제 내의 자원 접근 코드를 실행함

    3. 자원 접근이 끝나면 사용자 모드로 복귀해서 실행을 계속함

     

    일반적으로 응용 프로그램은 실행 과정에서 운영체제 서비스를 매우 자주 이용한다. 즉, 사용자 모드와 커널 모드를 매우 자주 오간다는 것이다.

Designed by Tistory.