CS 지식이 거의 없는 나.. 회의에서 하는 말을 알아듣지 못하는데?!
커널이 어쩌구 저쩌구 ~ 시스템 콜이 어쩌구 저쩌구 ~ 무슨 말인지 알아듣지 못했다..!
(사실 박식하지 않아서 모르는 거임;;)
그래서 준비한 운영체제의 기초 중의 기초..! 커널에 대해서 알아보자!
일단 커널을 설명하기 앞서 운영체제(Operating Sysystem, OS) 가 무엇인지부터 간단하게 알아보자.
일단 우리가 사용하는 window, linux, macOS, iOS, Android 같은 것들이 모두 운영체제라는 건 알고 있을 것이다.
또한 예를 들어 window 같은 경우는 GUI(Graphic User Interface) 를 통해서,
linux 같은 경우는 CLI(Command Line Interface) 를 통해서(GUI 도 가능함) 하드웨어와 소통하는 것 정도는 알고 있을 것이다.
![]() | ![]() |
---|---|
GUI | CLI |
이를 통해, 운영체제라는 것이 사용자가 하드웨어와 상호작용하기 위한 무언가라는 걸 알 수 있다.
운영체제(Operating System, OS) 란 컴퓨터 시스템 핵심 소프트웨어로, 컴퓨터 하드웨어와 응용 프로그램 간의 상호작용을 관리하고 제어하는 역할을 한다.
운영체제의 목적은 사용자와 하드웨어 사이의 인터페이스를 제공해 효율적으로 응용 프로그램이 동작하도록 지원하고, 시스템 자원을 효율적으로 관리하여 응용 프로그램이 원활하게 동작할 수 있도록 하는 것이다.
그렇다면 커널은 무엇일까?!
커널은 운영체제의 심장이라고 할 수 있다!!
시스템 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능 등 운영체제의 핵심 기능은 커널이 담당한다고 보면 된다. 그렇다면 커널에는 해당되지 않는 부분은 무엇일까?
앞서 말한 GUI, CLI 같은 사용자 인터페이스는 커널에 해당되지 않는다. 커널은 항상 컴퓨터 자원들을 바라보고 있기 때문에 사용자와의 상호작용은 지원하지 않는다.(사용자와 커널간의 다리 역할을 수행하는 것은 Shell 이다. 즉, 사용자는 쉘을 통해 커널에게 명령을 내릴 수 있다.)
자! 여기서 응용 프로그램과 하드웨어 사이에 운영체제가 존재한다는 의미는 사용자가 하드웨어에 직접 접근할 수 없다는 걸 의미한다.
만약, 사용자가 하드웨어에 직접 접근하고 조작할 수 있다면 CPU, 메모리 등을 임의로 조작할 수 있다는 의미이고 그렇다면 자원이 무질서하게 관리될 것이다. 이것은 시스템 자원에 접근할 수 있는 건 오직 운영체제 뿐이라는 것이고 응용 프로그램의 요청을 받은 운영체제가 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행한다는 뜻이다.
여기서 등장하는 개념이 유저 모드, 커널 모드, 시스템 콜, 소프트웨어 인터럽트다.
유저 모드와 커널 모드에 대해 알아보기 전에 먼저 커널 영역과 사용자 영역에 대해 알아보자.
일단 메모리 내에는 커널 영역과 사용자 영역이 존재한다. 운영체제는 커널 영역에 적재되고 사용자가 이용하는 응용 프로그램은 사용자 영역에 적재된다. 운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리하고 또한 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다.
즉, 커널 영역에 적대된 운영체제는 사용자 영역에 적재된 프로그램들에게 자원을 할당하고 이들이 올바르게 실행되도록 돕는 역할을 한다.
그렇다면 유저 모드와 사용자 모드란 무엇일까?
일단, 이중 모드(dual mode) 란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 것이다.
사용자 모드 : 운영체제 서비스를 제공받을 수 없는 실행 모드
커널 모드 : 운영체제 서비스를 제공받을 수 있는 실행 모드
즉, 사용자 모드에서는 커널 영역의 코드를 실행할 수 없다는 뜻이고 사용자 모드에서는 하드웨어 자원에 접근할 수 없다는 뜻이다. 하지만 커널 모드에서는 하드웨어 자원에 접근이 가능하다.
그렇다면 하드웨어에 접근하기 위해서는 커널 모드로의 전환이 필요한데 이 때 등장하는 개념이 시스템 콜이다. 쉽게 말해, 시스템 콜이란 사용자 모드에서 커널 모드로 전환하기 위한 요청이라고 보면 된다.
더 추가해서 말하자면 시스템 콜은 일종의 인터럽트라고 볼 수 있다. 인터럽트는 프로그램이 컴퓨터에서 동작하고 있을 때 예외상황이 발생하여 처리가 필요할 때 이를 마이크로 프로세서에게 알려 처리를 할 수 있도록 하는 것을 말하고 외부 인터럽트(하드웨어 인터럽트), 내부 인터럽트(소프트웨어 인터럽트)로 나뉘게 된다. 시스템 콜의 경우 소프트웨어 인터럽트에 포함된다고 보면 된다.
인터럽트와 관련된 내용이 조금 복잡해서(내부 인터럽트는 사실 인터럽트가 아니라고 하는데 뭔 말인지 모르겠다..) 일단은 그냥 시스템 콜이 일종의 인터럽트다 정도로만 알아두면 된다.
시스템 콜의 동작 방식을 알아보자.
(1) 시스템 콜을 통해 유저 모드에서 커널 모드로 전환을 한다.
(2) 커널 모드에서 운영체제 코드를 실행을 한다.
(3) 다 끝났다면 다시 유저 모드로 복귀해서 실행을 한다.
인데.. 무슨 말인지 잘 모를 수 있기 때문에 예시를 하나 들어서 설명을 하겠다.
사용자가 a.txt 라는 파일을 연다고 생각을 해보자. 그렇다면 윈도우를 쓴다고 가정을 하면, 사용자는 a.txt 라는 파일을 클릭할 것이다. 그렇다면 그 응용 프로그램(예를 들면 메모장)이 이 이벤트를 감지를 해서 해당 파일을 연결하도록 요청을 하고 운영체제의 API 를 호출해서 파일 열기 요청을 한다.
여기까지가 사용자 모드에서 일어나는 일이고 파일 열기 요청이 일어나는 것이 시스템 콜이라고 볼 수 있는데 커널 모드로 전환이 되어서 파일 열기를 처리를 한 다음 사용자 모드의 응용 프로그램에 필요한 데이터를 반환을 한다. 반환이 되면 사용자 모드로 다시 전환이 되는 것이다.
오늘은 정말 간단(?) 하게 운영체제란 무엇인지, 커널, 시스템 콜이 무엇인지에 대해서 알아보았다..! 인터럽트가 무엇인지, 또 여러개의 시스템 콜이 발생하면 어떤 일이 일어나는 지에 대한 부분에 대해서는 더 조사가 필요할 것 같다.
https://jerryjerryjerry.tistory.com/171
https://www.youtube.com/watch?v=v30ilCpITnY
혼자 공부하는 컴퓨터구조 + 운영체제
Image by Mohammad Sheyriyar Shah from Pixabay