충남대학교 컴퓨터공학과 류재철 교수님의 "운영체제 및 실습" 강의를 필기한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

DMA

  • Direct Memory Access : IO모듈을 따로 두어서(IO 전담 프로세서) 이 과정을 책임짐 - cpu가 IO작업을 하지 않는다
  • IO : 입출력받는 모든 일 - 키보드 모니터 프린터 등 - IO모듈이 하는 일은 이 중에서도 필요한 데이터를 하드디스크에서 갖고오는 일을 한다
  • 이전에는 원하는 데이터가 메인메모리에 없으면 cpu가 하드디스크로 갖고왔음 - cpu가 직접 갖고오는 것을 Programmed IO라고 한다)
  • System bus : 컴퓨터 내에서 데이터들이 아동하는 통로(전선)
  • IO module안에는 buffer가 있어서 하드디스크로부터 가져온 데이터를 cpu가 가져가기 전까지 임시로 보관하게 된다

Interrupt

  • IO Interrupt : IO모듈이 제대로 된 데이터를 갖고왔는지 cpu가 확인해야하기 때문에 IO모듈이 interrupt를 거는 것 - 이러한 IO방식을 Interrupt driven IO라고 한다
  • Interrupt라는 것은 어떤 중요한 이벤트가 발생해 cpu가 지금 하던일을 멈추고 새로운 이벤트에 대응해야 된다고 cpu에 알려주는 것을 의미한다

Memory hierachy

  • Memory hierarchy : 하드디스크 → 메인메모리 → 캐쉬 → 레지스터 계층구조를 의미함
  • 가격, 속도, 유지 등의 요소를 고려해 적절한 메모리 계층구조를 가지게 된다

Processor

  • Process : 프로그램이 OS로 오면 실행가능한 프로그램을 process라고 부름
  • 이 process들을 실행하는게 processor

CPU, GPU, DSP

  • CPU 는 명령어를 빠르게 처리하지만
  • GPU 는 수학적 계산을 빠르게 처리하기 위해 나온 프로세서
  • DSP(Digital Signal Processor) 로 음악이나 비디오 등의 시그널 처리를 담당한다
  • CCP(Crypto Co-Processor) 로 암호처리를 담당한다

프로세스의 처리 과정

몇가지 레지스터들 용어정리

  • 기억안날까봐 다시 한번 설명해준다
  • PC(Program Counter) : 다음으로 실행할 instruction이 들어있는 주소를 저장하는 레지스터
  • IR(Instruction Register) : PC에 담긴 주소로 가서 가져온 instruction을 저장하는 레지스터
  • AC(accumulator) : 임시저장소

Fetch

  1. PC에서 주소를 읽어 메모리의 해당 주소로 간다
  2. 거기 저장되어있던 instruction을 IR에 load한다

Execute

  1. IR에 load된 instruction을 실행하고 다시 Fetch를 반복한다

Interrupt의 종류

  • Program : overflow, division by zero등의 상황이 일어났을 때
  • Timer : 타임쉐어링 시스템에 의해 프로세스가 할당받은 시간이 만료되었을때
  • IO : IO module이 데이터를 하드디스크로부터 갖고왔을 때
  • Hardware : memory parity failure등의 하드웨어적 이벤트가 일어났을 떄

Interrupt가 발생했을 때

  • 기존 프로세스는 멈춰서 기다리고 interrupt handler가 interrupt를 해결하고 그 다음 줄로 넘어와 계속 코드를 실행하게 된다
  • IDT : Interrupt Descriptor Table / IVT : Interrupt Vector Table : error, interrupt를 해결할 수 있는 코드의 위치(주소)를 정리한 표가 있는데 이제 interrupt handler는 이 표에 가서 지금 일어난 interrupt를 해결할 수 있는 코드가 어디에 있는지를 알아내 실행하게 된다
  • System Call Table : 이것은 시스템 콜을 처리하는 코드의 위치(주소)를 정리한 표인데 이 표가 저장된 주소도 IDT의 마지막에 들어있다
  • 따라서 하나의 instruction을 execute다음에는 <반드시> interrupt가 일어나는지 검토하는 작업이 이루어진다

Multiple interrupt

  • 여러개의 interrupt가 일어났을 때 처리하는 방식은 두가지가 있다
  • Disable/sequential : interrupt가 일어난 순서대로 처리하는 것 - 하나의 interrupt를 다 처리하고 나서 다음것이 실행됨 - interrupt를 처리하는 중간에 또다른 interrupt가 발생해도 처리하던 interrupt를 계속 처리한다
  • Nested : priority를 정해서 처리하는 것 - interrupt가 처리되는 와중에 새로운 interrupt가 발생했을 때 우선순위를 따져서 높은걸 먼저 처리하고 낮은걸 나중에 처리한다 - 낮은 interrupt가 발생하면 disable처럼 하던거 계속 하고 높은게 발생하면 중단하고 높은거 처리한 다음에 넘어와서 계속 처리 하는 구조이다

OS

  • OS : 이러한 하드웨어들이 제대로 굴러가도록 관리하는 소프트웨어

OS가 제공하는 서비스들

  1. 프로그램 개발
  2. 프로세스 실행 - process management - 프로세서와 연관
  3. IO기능 을 사용할 수 있게 함 - IO managemant
  4. 파일들에 접근 할 수 있도록 해줌 - 리눅스의 경우 file discriptor를 통해서 파일들에 접근할 수 있게 해주는거 알쥬? - file management - 하드디스크와 연관
  5. 시스템에 접근 / 다른 프로세스의 자원 등에 함부로 접근하지 못하게 하는 등의 protection - Memory protection이라고 한다 - memory management - 메인메모리와 연관
  6. 에러에 대한 대응
  7. 컴퓨터의 사용자가 여러명일 경우 누가 얼마나 썼는지를 계산 - 보통 클라우드에서 중요하다

Kernel

  • Kernel은 OS의 핵심부분을 일컫는 말이다
  • OS는 아주 사이즈가 크기 때문에 kernel이라는 핵심만 메모리에 상주하게 된다
  • 요즘은 컴퓨터의 성능이 놓기 때문에 커널의 사이즈를 점차 줄여나가는 microkernel이 추세이다

Process

  • 프로그램이 실행되기 위해서는 메모리에 공간을 할당받아야 하고 또 그자리에 load되어야 하고 cpu time도 체크해야 되고 등등의 여러 데이터 구조와 여건이 갖춰져야 한다
  • 이런 여건들을 갖춰 os가 관리할 수 있는 실행 가능한 상태가 된 프로그램을 process라고 한다 - program in execution
  • 프로그램은 그냥 자료의 단위이고, 프로세스가 되어야 실행의 단위가 된다

프로세스 실행의 종류

  • Batch processing : 유사한 프로그램들을 한꺼번에 처리하는 것
  • Multi programming(Concurrent Programming) : IO 등의 인터럽트가 일어나서 CPU가 기다리는동안 놀지 않고 다른 프로세스를 가동하는 것 - time sharing도 인터럽트를 발생시키지만 time sharing에 의한 인터럽트는 multi programming 이라고 하지 않는다 <-> 반대개념으로는 uniprogramming이 있다
  • Multi processing(Symmetric Multi Processing - SMP) : 여러개의 코어를 갖는 CPU를 이용해 말 그대로 프로세스를 여러개 가동시키는것 - Multi programming과 헷갈리지 말아야 한다 - Multi programming의 경우에는 코어가 한개여도 가능하다 <-> 반대개념은 uniprocessing이다(싱글코어인 것)
  • Distributed computing : 컴퓨터 여러개를 하나로 묶어 마치 하나의 컴퓨터처럼 움직이게 하는 개념

Time sharing system

  • IO가 안일어나서 cpu가 쉬는경우가 안일어나면 하나의 프로그램이 cpu를 계속 사용하는 일이 일어나게 된다 - monopolize라고 한다
  • 이것을 방지하기 위해 각각의 프로세스에 시간을 할당하는 time sharing system이 나오게 된다

User mode vs Kernel mode

  • user mode : 일반적인 사용자 모드. 일반적인 instruction들을 사용하고 접근이 제한된 메모리 공간에는 접근하지 못한다
  • kernel mode : 관리자 모드 같은것. 시스템의 중요한 부분을 변경하는 privileged instructions들과 제한된 메모리 공간에 접근하는 것도 가능하다
  • privileged instructions나 제한된 메모리 공간에 무분별하게 접근해 시스템이 오작동하는 것을 막기 위해 os는 프로세스의 실행 모드가 유저인지 커널인지를 확인하게 된다

UNIX 시스템 작동 순서

Unix system

  • User → (command) → Command interpreter → (system call) → OS → (instructions) → Hardware
  • system call은 OS와 밀접한 함수를 뜻하며 privileged instruction의 바로 상위 레벨 언어라고도 할 수 있다