혼공컴운

[혼공컴운] 9장. 운영체제 시작하기

게으른 the lazy 2024. 7. 29. 02:16

https://www.almabetter.com/bytes/articles/list-of-operating-system

9. 운영체제 시작하기

  • 지금까지 알아본 것들은 모두 하드웨어였다.
  • CPU는 ALU, 제어장치, 레지스터, 캐시로 구성된다.
  • 그 외에 메모리, 보조기억장치, 입출력장치들이 있다.
  • 이것들이 주고받는 정보에 대해서도 알아봤다.
  • 하지만 전기를 넣는다고 알아서 정보를 주고받지 않는다.
  • 사람이 사무실에 앉아 있다고 해서 일을 하는 것은 아니듯이 말이다.
  • 그럼 뭣이 필요한가?
  • 지능이 필요하다!

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

  • 사람의 뇌는 단순히 하드웨어가 아니다.
  • 뉴런들이 전기 신호를 통해 정보를 주고 받는 복잡한 기계이다!
  • 전기 신호를 어떤 기준으로 발생시키고, 어떻게 해석할 것인가?
  • 해석한 결과를 어떻게 이용할 것인가?
  • 이 모든 것에 필요한 것을 우리는 '지적 능력' 또는 '지능'이라고 부른다.
  • 컴퓨터의 부품은 하드웨어이다.
  • 이것들이 잘 돌아가도록 정보의 흐름을 관장할 지능이 필요하다.
  • 그것을 우리는 '운영체제'라고 부른다.
  • 이름이 기니까 앞으로는 OS라고 부르겠다.
  • OS의 역할: 프로그램 실행에 필요한 자원을 할당하고, 프로그램이 제대로 실행되도록 돕는다!

  • OS의 코어에 해당하는 부분을 커널이라고 부른다.
  • OS에서 커널을 뺀 나머지에는 사용자 인터페이스 등이 들어있다.
  • 커널은 다음 절에서 자세히 다룬다.
  • OS도 어쨌든 프로그램(소프트웨어)이다.
  • 따라서 메모리 어딘가에 올라간다.
  • 다만 컴퓨터의 시작과 끝이므로 중요하게 다루어야 한다.
  • OS는 메모리의 커널 영역에 올라간다.
  • 메모리에서 커널 영역이 아닌 부분을 사용자 영역이라고 부른다.

출처: https://people.kernel.org/linusw/how-the-arm32-kernel-starts


  • OS가 하는 일들
    • 각 프로그램(프로세스)이 메모리 어디에 올라갈지를 정해준다. (메모리 할당)
    • 당연히 메모리가 겹치지 않게 잘 관리해야 한다.
    • 두 프로그램이 하나의 하드웨어를 동시에 사용할 수 없으므로, 누가 먼저 쓰게 할지 정해준다. (자원 할당)

  • 그래서 OS를 왜 알아야 하는가?
  • 컴퓨터 사용, 프로그램 사용, 코딩, 이 모든 것들은 결국,
  • 컴퓨터라는 기계와 대화하는 행위이다.
  • 그런데 이 기계는 OS라는 지능을 갖고 있다.
  • 기계와 대화하고 싶다면? 기계를 더 잘 이해하고, 더 잘 쓰고 싶다면?
  • 기계의 지능인 OS를 알아야 한다.

9.2 운영체제의 큰 그림

  • OS의 가장 중요한 역할은 소프트웨어와 하드웨어 간의 중개이다.
  • 각 소프트웨어(프로그램)에게 필요한 하드웨어(자원)을 할당해주어야 한다.
  • 시간 및 공간적으로 겹치지 않는지, 누구에게 무엇을 먼저 줄 것인지도 정해야 한다.
  • OS는 바쁘다!

  • OS에서 핵심 기능을 담당하는 부분을 커널이라고 부른다.
  • OS에서 커널을 뺀 나머지는 사용자와의 상호작용을 위한 것이므로, 커널만 이해해도 충분하다.

  • 살다 보면 간혹 아무 생각 없이 무언가를 할 때가 있다.
  • 그럴 때 우리는 '무지성'이라는 단어를 쓴다.

출처: https://quasarzone.com/bbs/qb_free/views/6567132

  • 그런데 중요한 일을 할 때에는 무지성이면 안 된다.
  • 지금까지 보았듯이, 컴퓨터는 굉장히 복잡하게 돌아간다.
  • HDD에서 정보를 가져와서 메모리에 올리고,
  • 시스템 버스와 레지스터를 통해 정보를 가져오고 (이 작업에서 제어 버스와 제어장치가 일을 한다.)
  • 그 와중에 인터럽트가 들어오면 뭘 먼저 실행할지 정한다.
  • 심지어 이것들이 쉬지 않고 병렬로 실행된다!
  • 이 작업을 무지성으로 하면 어떻게 될까?
  • 그래서 OS가 필요하다!

  • 사용자, 또는 사용자가 실행하는 프로그램은 하드웨어 자원에 함부로 접근하면 안 된다.
  • 총괄 매니저가 필요하다. OS가 그 역할을 한다.
  • 프로그램은 필요한 자원을 OS에게 요청한다.
  • 그리고 OS는 한 번에 하나의 요청만 처리한다.
  • 그래서 OS가 일하는 모드, 프로그램이 일하는 모드가 분리되어 돌아간다.
  • 이것을 이중 모드(dual mode)라고 부른다.
  • OS가 일하는 모드를 커널 모드(kernel mode)라고 부른다.
  • 프로그램이 실행되는 모드를 사용자 모드(user mode)라고 부른다.

출처: https://cstaleem.com/user-mode-vs-kernel-mode-trap-vs-interrupt

  • 프로그램은 OS에게 필요한 것을 요청한다. 이것을 시스템 호출(system call)이라고 부른다.
    • 시스템 호출도 일종의 인터럽트이다. 소프트웨어적으로 발생하므로 소프트웨어 인터럽트라고 부른다.
  • 호출을 받은 OS는 원래 하던 작업을 백업하고 커널 모드로 들어가서 필요한 작업을 한다.
  • 작업을 마치면 시스템 호출 복귀를 보낸다.
  • 사용자 모드가 되어 프로그램이 돌아간다.
  • 그래서 OS가 돌아가는 동안에는 커널 모드와 사용자 모드가 계속 스위칭된다.

9.2.1 운영체제의 핵심 서비스

  • OS가 제공하는 핵심 서비스를 하나씩 알아보자.

  • 프로세스 관리
  • 7장에서 말한 적이 있는데, 보조기억장치에 있는 것은 파일일 뿐이다.
  • 파일은 프로그램이 아니다. 돌아가야 프로그램이다.
  • 돌아가려면 메모리에 올라가야 한다.
  • 하나의 파일도 여러 개가 복제되어 돌아갈 수 있다.
  • 예를 들어 메모장은 notepad.exe인데, 메모장을 2개 띄우면 작업 관리자에 notepad.exe가 2개가 된다.
  • OS가 하는 일 중 하나가 이 프로세스 관리이다.
  • 프로세스는 메모리에 올라가는데, 당연히 메모리 영역이 겹치지 않게 관리해주어야 한다.

출처: https://www.geeksforgeeks.org/introduction-of-process-management/


  • 자원 접근 및 할당
  • 프로세스는 일을 하려면 자원(하드웨어)이 필요하다.
  • 프로세스가 자원 필요하다고 탕비실 과자 집어가듯이 막 가져가면 안 된다.
  • 그러면 OS한테 혼난다.
  • 프로세스는 여러 개가 메모리에 올라가 있을 수 있지만, CPU는 한 번에 한가지만 실행한다.
  • 그래서 어느 프로세스를 먼저 CPU에게 시킬지 정해야 한다.

출처: https://www.krivalar.com/OS-resource-allocation-graph

  • 프로세스가 메모리에 올라갈 때에도 어디에 올릴지를 OS가 정한다.
  • 인터럽트가 발생했을 때 돌아가는 인터럽트 서비스 루틴은 OS의 커널에 들어있다.
  • 입출력장치가 발생시키는 인터럽트도 마찬가지로, OS가 받아서 CPU의 작업 순서를 조절한다.

  • 파일 시스템 관리
  • 당연한 얘기지만, 파일이 들어있는 폴더도 관리한다.
  • 이것을 파일 시스템이라고 부른다.
  • 파일 시스템 관리도 OS의 몫이다.