profile image

L o a d i n g . . .

운영체제 시작하기

운영체제를 알아야 하는 이유

운영체제란

모든 프로그램은 하드웨어를 필요로 한다.

ex1. 1+3 을 계산하는 프로그램은 CPU가 필요하다.
ex2. 이미지를 하드 디스크에 저장하는 프로그램은 하드 디스크를 필요로 한다.

프로그램 실행에 마땅히 필요한 요소를 가리켜, 시스템 자원 혹은 자원 이라고 한다.
컴퓨터 구성부품(CPU, 메모리, 보조기억장치, 입출력장치 등)은 모두 자원이다.
당연하게도, 모든 프로그램은 실행되기 위해 자원이 필요하다.

실행할 프로그램이 필요로 하는 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이 바로 운영체제이다.

 

말했듯, 운영체제도 인터넷 브라우저, 게임과 같은 프로그램이다. 따라서 실행되기 위해선 똑같이 메모리에 적재되어야 한다.

다만, 운영체제는 직접 컴퓨터 부품들을 관리하며 프로그램이 올바르게 실행되도록 돕는, 매우 특별한 프로그램이다. 따라서 컴퓨터가 부팅될 때 항상 메모리 내 커널 영역 이라는 공간에 따로 적재되어 실행된다.
커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역을 사용자 영역이라고 한다.

개발자가 알아야 할 컴퓨터 구조 지식

즉, 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.

개발자가 알아야 할 컴퓨터 구조 지식개발자가 알아야 할 컴퓨터 구조 지식개발자가 알아야 할 컴퓨터 구조 지식

 

운영체제를 알아야 하는 이유

운영체제 덕분에 개발자는 하드웨어를 직접적으로 조작하는 코드를 작성할 필요가 없다. 운영체제한테 도움을 받으면 되기 때문이다.

그렇다면 왜 개발자들은 운영체제를 알아야 할까?

개발자가 만드는 프로그램은 결국 하드웨어가 실행하고, 그 하드웨어를 조작하는 프로그램이 운영체제이다.
따라서 운영체제는 개발자가 만든 프로그램이 하드웨어 상에서 어떻게 작동하는지, 그 누구보다(프로그램을 만든 개발자보다) 더 자세히 알고 있다.

또한 운영체제는 우리와 대화할 수 있는 프로그램이다. 운영체제는 현재 하드웨어의 상태는 어떤지, 코드가 어떻게 실행되었는지, 하드웨어 상에서 어떤 문제가 있었는지 우리에게 상세히 알려줄 수 있고 이를 통해 우리는 문제 해결의 실마리를 찾을 수 있다.

개발자가 알아야 할 컴퓨터 구조 지식

 

운영체제의 큰 그림

 

운영체제의 심장, 커널

커널은 운영체제의 핵심부로, 마치 사람의 심장, 자동차의 엔진과도 같다.

커널은 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능을 담당하는 운영체제의 핵심 서비스이다.

운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스는 대표적으로, 사용자 인터페이스 User Interface 가 있다.

  • GUI 그래픽 유저 인터페이스
  • CLI 커맨트 달인 인터페이스

 

이중 모드와 시스템 호출

운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 막는다.
막지 않아 응용 프로그램이 CPU, 메모리, 하드 디스크에 마음껏 접근하고 조작한다면 자원이 무질서하게 괸라되고, 컴퓨터 전체에도 미치는 영향이 매우 크다.

그래서 운영체제는 응용 프로그램이 자원에 접근하기 위해서는 오직 자신을 통해서만 접근하도록 한다. 응용 프로그램이 자원이 접근하기 위해서는 운영체제에 도움을 요청해야 하고, 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행한다.

그리고 이는 이중 모드로서 구현이 된다. 이중 모드란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.

사용자 모드란 운영체제 서비스를 제공받을 수 없는 실행 모드이다. 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다.

커널 모드란 운영체제 서비스를 제공받을 수 있는 실행 모드이다. 운영체제는 커널 모드로 실행되기 때문에, 운영체제의 코드가 자원에 접근하는 코드(명령어)여도 CPU에 의해 실행 가능하다.

사용자 모드로 실행되는 프로그램이 자원에 접근할 수 있는 운영체제 서비스를 제공받으려면, 운영체제에 요청을 보내 CPU 명령 실행 모드를 커널 모드로 바꿔야 한다.
여기서 운영체제 서비스를 제공받기 위한 요청을 시스템 호출(시스템 콜) 이라고 한다.

개발자가 알아야 할 컴퓨터 구조 지식

시스템 콜은 일종의 인터럽트이다.

인터럽트는 입출력장치에 의해 발생하기도 하지만 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 하는데, 이를 소프트웨어 인터럽트라고 한다. 시스템 콜은 소프트웨어 인터럽트이다.

  • 시스템 콜 호출 예시
    1. 한 응용 프로그램이 하드 디스크에 데이터를 저장하려 함.
    2. 하지만 사용자 모드로(유저모드)로 실행되는 동안에는 자원(하드 디스크)에 접근할 수 없기에 커널 모드로 전환이 필요.
    3. 응용 프로그램은 하드 디스크에 데이터를 저장하는 시스템 호출을 발생시킴.
    4. 운영체제는 시스템 호출을 받고 커널 모드로 전환, 운영체제 내의 '하드 디스크 데이터를 저장하는 코드'를 실행.
    5. 필요한 하드 디스크로의 접근이 끝나면 다시 사용자 모드로 복귀하여 응용 프로그램 실행을 계속해 나감.

일반적으로 응용 프로그램은 실행 과정에서 컴퓨터 자원을 다루는 운영체제 서비스들을 매우 빈번하게 이용함.
그 과정에서 빈번하게 시스템 호출을 발생시키고 사용자 모드와 커널 모드를 오가며 실행.

 

운영체제의 핵심 서비스

운영체제의 핵심 서비스를 제공하는 부분이 커널.
사용자 프로세스가 커널의 서비스를 제공받기 위해서는(커널 영역의 코드를 실행하기 위해서는) 사용자 모드(유저 모드)에서 커널 모드로 전환해야 하고, 이는 시스템 호출을 통해 이루어짐.
즉, 시스템 호출은 커널 모드로써 운영체제의 서비스를 제공받을 수 있는 방법.

대표적인 커널의 서비스로는 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리가 있다.

프로세스 관리

실행 중인 프로그램을 프로세스라고 함.
일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기에, CPU는 이 프로세스들을 조금씩 번갈아가며 실행함. 그래서 운영체제는 이 프로세스들을 잘 관리하여 문제없이 모든 프로세스들이 실행될 수 있게 해야 함.

자원 접근 및 할당

CPU
일반적으로 메모리에는 여러 프로세스가 적재되고, 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있음.(1코어 CPU)
이에 운영체제는 프로세스들이 공정하게 CPU를 할당받을 수 있도록 관리해야 함. -> CPU 스케줄링

메모리
메모리에 적재된 프로세스들은 크기도, 적재되는 주소도 가지각색. 같은 프로세스라 할지라도 실행할 때마다 적재되는 주소가 달라짐. 운영체제는 새로운 프로세스가 적재될 때 어느 주소에 적재해야할 지 결정해야 함. 그리고 메모리가 부족할 경우에도 해결해야 함.

입출력 장치
인터럽트 서비스 루틴(인터럽트를 처리하는 프로그램)은 운영체제가 제공하는 기능으로 커널 영역에 있음.
입출력장치가 CPU에 하드웨어 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업한 뒤 커널 영역에 있는 인터럽트 서비스 루틴을 실행.

파일 시스템 관리

파일 열기/생성/삭제, 디렉토리(폴더) 등의 파일 시스템도 운영체제가 지원하는 핵심 서비스.
보조기억장치 속 데이터를 파일과 디렉토리로 관리.

#혼공학습단 #혼공 #혼공컴운

복사했습니다!