CS/OS 수업 / / 2021. 3. 15. 02:10

운영체제 3주차


  • 컴퓨터 시스템의 메모리는 ROM과 RAM으로 구성되며, 일반적으로 메모리의 첫 부분에는 ROM, 뒷 부분에는 RAM이 위치함.
  • ROM의 시작 위치에는 부트로더 프로그램이 저장되어 있음. ROM은 비휘발성 저장장치이므로 전원이 꺼져도 ROM에는 데이터가 남아있다. 즉, 부트로더라는 프로그램은 전원이 꺼져도 데이터가 살아있다.
  • 전원이 켜지면 CPU는 메모리 첫 부분의 내용을 읽어 수행하게 되는데, 부트로더를 수행하게 됨.
    • 전원이 켜지면 PC 레지스터 값이 0으로 초기화 됨. → 메모리의 0번지의 내용을 읽어서 IR 레지스터가 명령 실행. 그런데 0번지 부근에는 뭐가 있다? 부트로더가 있다. 즉, 부트로더가 실행됨
    • 전원이 켜지면 CPU 모드는 커널 모드로 초기화 됨. (상태 레지스터의 모드 비트가 0으로 초기화 됨) → 즉, 부트로더는 커널 모드에서 실행된다.

  • 부트로더가 하는 일
    • 시스템 초기화 및 테스트(메모리, 기본 입출력 장치 등)
    • 운영체제 파일을 disk에서 읽어들여 메모리에 올리고 실행시킨다. → 예를 들어, 부트로더가 운영체제를 메모리 1000번지에 올리고 PC 레지스터에 1000번지를 setting한다. 그러면 IR 레지스터는 1000번지의 명령을 수행한다. 이런 과정이 반복돼서 결국 운영체제가 실행된다.
  • 운영체제가 부팅될 때 하는 일
    • 시스템 초기화
    • 응용 프로그램(시작 프로그램 같은 거)을 시작하기 전에 CPU 모드를 유저 모드로 변경(특수 명령어를 실행하여 변경)
    • 최초의 응용 프로그램을 시작시킴(유닉스의 경우, init 프로그램)
  • 이후, 운영체제는 인터럽트에 의해 CPU 제어를 받아서 수행됨(운영체제는 인터럽트에 의해 구동되는 프로그램) → 이런 인터럽트가 발생하면 운영체제 내부에 있는 ISR(Interrupt Service Routine 혹은 Interrupt Handler)이 수행됨. 부팅하는 과정에는 그냥 흐름대로 수행이 되고, 그 이후에는 인터럽트에 의해서만 작동함.
    • 타이머 인터럽트: 주기적으로 인터럽트 발생시킴
    • 응용 프로그램: 시스템 호출이라는 걸 수행해서, 소프트웨어 인터럽트를 발생시킴
    • 입출력 장치: 입출력을 마치면 인터럽트 발생시킴
  • ISR은 외부에서 H/W 적으로 인터럽트가 발생하면 CPU는 하는 작업을 멈추고 ISR로 점프하여 인터럽트에 관한 루틴을 수행하게 된다. 인터럽트는 CPU가 외부세계의 입력헤 대해서 대처하기 위한 하드웨어적인 방법이다. 예를 들어, 랜 카드에 데이터 패킷이 들어오면 랜 카드는 CPU에 인터럽트를 발생시키고 CPU는 ISR을 수행해서 데이터 패킷에 대한 기본적인 처리를 하고 복귀. 그런 후에 CPU는 task level에서 패킷에 관한 처리를 마무리한다. 인터럽트는 짧게 유지하는 것이 좋다. 외부 패킷이 도착했다는 것 정도만 CPU에게 알리고 나머지는 task level에서 처리.

  • 인터럽트에 의해 운영체제가 수행될 때, CPU 모드는 자동으로 커널 모드로 바뀌고 ISR이 수행됨.
  • 운영체제는 항상 커널 모드에서 수행이 되며, 인터럽트 서비스 루틴(소프트웨어적인 처리) 수행
    • CPU 레지스터들의 값(PC 레지스터, 상태 레지스터, IR 레지스터 ... etc) 을 일괄적으로 저장
    • 해당 인터럽트에 처리
    • 인터럽트 처리 후, 인터럽트가 발생했던 작업으로 되돌아가기 위해, 저장했던 CPU 레지스터 값들을 복원하여 인터럽트가 발생하기 직전으로 CPU 제어를 넘긴다.

운영체제의 수행과 CPU 모드

  • CPU 모드: OS가 자신을 보호하고 시스템 구성요소를 보호할 수 있게 함.
    • 유저모드와 커널모드가 있음
    • 특정 명령어(IO 명령어 등)는 커널 모드에서만 실행할 수 있도록 특권 명령어로 지정되어 있다.
  • 운영체제는 항상 커널모드에서 수행됨
    • 부팅할 때, 커널모드에서 시작하므로 운영체제는 커널모드에서 수행되며, 이후 인터럽트가 발생하면, 하드웨어적으로 CPU 모드가 커널 모드로 설정되어 운영체제가 수행된다. 따라서 운영체제는 항상 커널모드에서만 수행된다.

시스템 콜(System call)

  • 운영체제가 응용 프로그램에게 제공하는 시스템 함수
  • 응용 프로그램은 마치 함수 호출을 하듯이 호출하여 사용 가능
  • 응용 프로그램은 직접 하드웨어를 제어하거나 파일을 read/write를 할 수 없다. 시스템 콜을 사용함으로써, 간접적으로 응용 프로그램 대신 커널 모드에서 운영체제가 대신 read/write 해준다.
  • 예를 들어, fd = open("file.txt", O_RDWR); 을 실행하면 해당 명령어는 트랩으로서 인터럽트를 발생시킨다. 인터럽트가 발생하면 운영체제에 있는 ISR이 수행된다. 인터럽트 완료 시, 원래 하던 작업으로 돌아간다.

트랩이란?

  • 어떤 프로세스가 특정 시스템 기능(이를 테면, IO)을 사용하려고 할 때, 그 기능을 운영체제에게 요청하는 방법을 말한다.

인터럽트와 트랩

  • 인터럽트: 하드웨어적 흐름의 변화. 프로그램 외부(IO 장치, 디스크)에서 발생하며, 발생 시점이 일정하지 않기 때문에 비동기적.
  • 트랩: 소프트웨어적 흐름의 변화. 소프트웨어 인터럽트라고도 하며, 프로그램 내부에서 일어나는 에러이다. 예외(Exception)와 시스템 콜이 있다.발생 시점이 프로그램의 일정한 지점이기 때문에 동기, 즉 고정된 영역에서 발생한다.
    • 예외: 메모리 참조 오류, 0으로 나누기, 오버플로우, 언더플로우 등
    • 시스템 콜: 사용자가 의도적으로 발생시킨 인터럽트.

라이브러리 - 시스템 콜 - OS의 관계

  • C 프로그램에서 printf() 라이브러리 함수를 호출하면, 이것은 wirte() 시스템 콜을 호출한다.
  • 사용자 프로세스는 유저 모드에서 수행되며, 시스템 콜을 호출하면 인터럽트 처리에 의해 CPU 모드가 자동으로 커널 모드로 바뀐다.

운영체제 구조

  • 단일(monolithic) 커널 구조
    • 운영체제의 모든 기능이 한 프로그램으로 구현됨
    • MS-DOS: 운영체제의 거의 모든 기능이 한 프로그램으로 구현됐으나, 이후 버전에서 디바이스 드라이버는 분리됐음.
    • Unix도 초기에는 단일 커널 구조로 설계됐다: 파일 시스템, CPU 스케줄링, 메모리 관리, 기타 여러 기능들이 하나의 프로그램으로 구현됨 → 초기 유닉스는 하드웨어 제약을 가졌으며 구조화되어 있지 않았다.
  • 마이크로(micro) 커널 구조
    • 중요 기능만 커널로 구현하고 나머지 기능을 사용자 모듈인 서버들로 구현 → 커널 소규모
    • 사용자 모듈 서버는 응용프로그램처럼 실행
    • 커널과 사용자 모듈 서버는 메시지를 사용하여 통신
    • 장점
      • 확장이 쉽다 → 확장이 쉽다는 의미는 단일 커널 구조에서는 새로운 기능을 추가하려면 커널에 기능을 추가하고 다시 컴파일해야 하지만 마이크로 커널에서는 커널을 변경할 필요하 없이 응용 프로그램을 새로 만들 듯 추가하면 된다.
      • 새로운 하드웨어 이식이 쉽다. → 단일 구조 커널에서는 OS를 이식하기 위해서는 시스템의 CPU와 메모리 환경을 고려하지 않을 수 없다. 그래서 OS를 이식하려면 커널을 다시 새로운 시스템 환경에 맞춰서 이식해야 한다. 그에 비해 마이크로 커널 구조는 커널이 마이크로이기 때문에 비교적 수정해야할 점이 적다.
      • 커널모드에서 실행되는 코드가 적어지기 때문에 신뢰성이 좋아진다. → 소스 코드가 많아질수록 버그가 늘어날 확률은 더욱 높아진다.
    • 문제점: 사용자 공간과 커널 공산의 잦은 통신이 필요하기 때문에 퍼포먼스가 떨어질 수 있다. → 하지만 하드웨어의 발전으로 인해 성능 문제는 신경쓸 필요가 덜해져서 요즘 커널 시스템 구조는 마이크로 커널 구조가 일반적이다.
    • e.g. <Mach>, <ChorusOS, L4, QNX> ← real-time 운영체제(임베디드 운영체제), 마이크로 커널의 장점이 부각되면서 <Mac OS, Windows NT>도 마이크로 커널 구조로 변경됐다. 단, 완전한 마이크로 커널 구조는 아니고 단일 커널 구조이면서 마이크로 커널 구조가 혼합돼 있어서 hybrid kernel 구조라고도 한다.
  • 모듈(module)을 지원하는 구조
    • 운영체제가 커널과 모듈로 분리되는 구조(모듈이 커널 안에 들어갈 수 있는 구조)
      • 커널은 프로세스, 메모리 관리 등 핵심 서비스만 구현
      • 하드웨어 드라이버, 파일 시스템 등 추가 기능은 마이클로 커널처럼 모듈로 되지만 이 모듈이 사용자 프로그램처럼 구현이 되는 것이 아니라, 커널 안에 들어갈 수도 있고 커널에서 뺄 수도 있는 구조이다.
    • 모듈은 부팅할 때, 또는 컴퓨터 사용 중에 커널에 링크(커널에 들어갈 수 있다)할 수 있음
    • 컴퓨터 사용 중에 모듈을 커널 메모리에서 제거할 수도 있음. 즉, 동적으로 커널에 모듈이 들어갈 수도 제거될 수도 있다.
    • 각 모듈은 잘 정의된 인터페이스를 사용하여 커널과 통신. 커널 안에서는 함수를 호출하듯이 모듈과 통신하기 때문에 마이크로 커널처럼 퍼포먼스가 떨어지지 않는다.
  • 최근 대부분의 운영체제는 모듈을 지원한다.
    • Solaris, Linux, Mac OS 등

'CS > OS 수업' 카테고리의 다른 글

운영체제 8주차  (0) 2021.04.20
운영체제 7주차  (0) 2021.04.14
운영체제 6주차  (1) 2021.04.05
운영체제 4주차  (0) 2021.03.22
운영체제 2주차  (0) 2021.03.15
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유