운영체제

운영체제

Tags
OS
Published
Author

운영체제의 역할과 구조

역할

  1. CPU 스케줄링과 프로세스 관리
  1. 메모리 관리
  1. 디스크 파일관리
  1. I/O 디바이스 관리

구조

notion image
시스템 콜 : 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 쓴다.

메모리 구조

  1. 코드 영역
  1. 데이터 영역
  1. 스택 영역
  1. 힙 영역
notion image

코드 영역

  • 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 불림.
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됨

데이터 영역

  • 프로그램의 전역 변수와 정적 변수가 저장되는 영역
  • 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸

스택 영역

  • 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
  • 함수의 호출과 함께 할당되며 호출이 완료되면 소멸
  • 푸시(push) - 데이터 저장, 팝(pop) - 데이터 인출
  • 후입선출 방식으로 동작해 가장 늦게 저장된 데이터가 가장 먼저 인출
  • 메모리의 높은 주소에서 낮은 주소의 방향으로 할당

힙 영역

  • 사용자가 직접 관리할 수 있는 ‘그리고 해야만 하는’ 메모리 영역
  • 사용자에 의해 메모리 공간이 동적으로 할당되고 해제
  • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당

동기/비동기 & 블로킹/논블록킹

notion image

동기

  • 동기 작업은 요청한 작업에 대해 순서가 지켜지는 것
  • 요청한 작업에 대해 완료 여부를 따짐

비동기

  • 비동기 작업은 요청한 작업에 대해 순서가 지켜지지 않을 수 있다는 것
  • 요청한 작업에 대해 완료 여부를 따지지 않음

Blocking/Non-Blocking

notion image
다른 요청의 작업을 처리하기 위해 작업을 blocking(차단,대기) 하냐 안 하냐의 유무를 나타내는 프로세스의 실행 방식

프로세스(Process)

프로세스는 메인 메모리에 할당되어 실행중인 상태인 프로그램

프로세스 상태

  • New : 프로그램이 메인 메모리에 할당된다.
  • Ready : 할당된 프로그램이 초기화와 같은 작업을 통해 실행되기 위한 모든 준비를 마친다.
  • Running : CPU가 해당 프로세스를 실행한다.
  • Waiting : 프로세스가 끝나지 않은 시점에서 I/O로 인해 CPU를 사용하지 않고 다른 작업을 한다. (해당 작업이 끝나면 다시 CPU에 의해 실행되기 위해 ready상태로 돌아가야함)
  • Terminated : 프로세스가 완전히 종료된다.
notion image

PCB(Process Control Block)

프로세스에 대한 모든 정보가 모여있는 곳 - Task Control Block(TCB)이라고도 한다.
  • PCB안에는 프로세스의 상태, 프로세스 번호(PID), 해당 프로세스의 program counter(pc), register값, MMU정보, CPU점유 시간 등이 포함되어 있다.
  • 운영체제 내부의 프로세스를 관리하는 코드 부분에 저장되어 있다.

프로세스 큐(Queue)

프로세스는 일반적으로 여러 개가 한 번에 수행되므로 그에 따른 순서가 필요한데 순서를 대기하는 곳을 큐라고 한다.
notion image
  • Job Queue : 하드 디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐
  • Ready Queue : CPU 점유 순서를 기다리는 큐
  • Device Queue : I/O를 하기 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 각각 존재

Context Switching(문맥 전환)

CPU가 한 프로세스에서 다른 프로세스로 옮겨가는 것
즉. 한 프로세스가 실행중인 것을 멈추고 다른 프로세스가 실행되는 것
  • Scheduler : CPU Scheduler를 말하며, CPU가 어느 프로세스를 선택할지 정한다.
  • Dispatcher : 실제 context switching이 발생하면 CPU의 내부 데이터를 이전 프로세스 데이터에서 새로 시작되는 데이터로 바꿔준다.

인터럽트(Interrupt)

CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것

실행순서

  1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냄
  1. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인
  1. CPU는 인터럽트 요청을 확인하고, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인
  1. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업
  1. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행
  1. 인터럽트 서비스 루틴 실행이 되면 4에서 백업해 둔 작업을 복후하여 실행을 재개합니다.

IPC

Inter Process Communication - 프로세스끼리의 의사소통
프로세스끼리 데이터를 공유하기 위해서는 IPC라는 데이터 공유 기법을 사용행야함
  1. 공유 메모리
      • 프로세스끼리 공유하는 메모리 영역을 구축하고 데이터를 공유
      • 공유 메모리 영역을 구축할때만 system call이 필요하고, 그 후 모든 접근은 일반적인 메모리 접근으로 취급되어 커널의 도움이 필요없다.
      • 동기화 작업이 필요
  1. 메시지 전달
      • 동기화 작업이 필요 없어 적은 양의 데이터를 교환하는데 유용
      • 공유 메모리 모델이 메시지 전달 모델보다 빠름

데드락

교착상태를 의미, 2개 이상의 프로세스가 서로 공유자원을 할당받기를 기다리고 있어서 그 누구도 일을 하지 못하는 상태

운영체제 연산

유저모드

  • 사용자가 접근할 수 있는 영역을 제한적으로 두고, 프로그램의 자원에 함부로 침법하지 못하는 모드
  • 유저모드에서 코드를 작성하고 프로세스를 실행하는 등의 행동을 할 수 있음

커널모드

  • 잘못된 프로그램으로 인해 다른 프로그램이 잘못 실행되지 않도록 하기 위해 사용되는 모드
  • 모든 자원에 접근, 명령을 할 수 있음

락(Lock)

공유자원을 하나의 스레드가 사용하고 있을 때 다른 스레드가 공유자원을 사용하지 못하도록 제한

락이 필요한 이유

notion image
스레드 1과 스레드 2가 동시에 동작한다고 하면 전역 변수의 값이 2로 변경 되어야하는지 1로 변경되어야 하는지 모르기 때문이다.

임계구역(Critical-Section)

어떤 한 프로세스가 임계 구역으로 정해진 구역에서 실행중이면 다른 프로세스들은 해당 임계 구역의 코드들을 실행하지 못하는 구역
  • 한 번에 하나의 프로세만 이용하여 접근을 제안하는 방식으로 같은 프로세스안의 스레드끼리는 동기화를 진행하여서 프로세스를 진행
  • 프로세스 안에서도 같은 자원에 대해서는 순차적으로 스레드가 실행

스핀 락(Spin Lock)

  • Lock과 Unlock을 사용하여 공유 자원의 접근을 관리하는 방식
  • 대기 중인 스레드는 CPU를 점유한 상태로 공유 자원의 락이 해제되었는지 지속적으로 확인하는 Busy Waiting 상태가 되게 되어 단일 CPU 경우에는 무한 루프에 빠지게 됨
  • CPU를 점유한 상태로 공유자원의 상태를 지속적으로 확인하기 때문에 빠르게 작업 수행 가능

뮤텍스 락(Mutex Locks)

  • 동기화를 위한 가장 간단한 도구
  • 세마포어와는 다르게 하나의 쓰레드만을 제어할 수 있습니다.
  • 바이너리 세마포어라고 부를 수 있다.(세마포어 값이 0또는 1)
  • 다른 프로세스로부터 임계구역을 보호하고 경쟁 상태를 예방

세마포어(Semaphore)

  • 뮤텍스 락보다 더욱 강력하고 편리하고 효율적인 도구
  • n개의 쓰레드를 제어할 수 있다.

모니터(Monitor)

  • 뮤텍스락과 세마포어의 단점을 극복한 동기화 도구

페이징(Paging)

프로세스의 물리적 주소 공간을 비연속적으로 허용하는 메모리 관리 체계
필요성
프로세스를 메모리에 올릴 때 가장 좋은 시나리오는 메모리에서 연속적인 위치에 그래로 올라가는 것 하지만 프로세스의 크기가 커질수록 연속적인 위치에 놓지 못하게 되어 메모리 위에서 프로세스는 쪼개지는 외부 단편화 현상이 발생함

가상 메모리(Virtual Memory)

물리적인 메모리 크기보다 더 큰 크기의 프로그램을 실행시키기 위한 기술
notion image
  • 가상 메모리에 올라간 페이지들을 메모리 맵을 통해서 물리적인 메모리 공간에 매핑시킵니다.
  • 실제 물리적인 메모리에 올라간 페이지들을제외한 나머지 페이지들은 보조기억장치인 Backing Store(보조기억장치)에 저장됩니다.
  • 가상 메모리의 페이지 공유 기술을 통하여 2개 이상의 프로세스에 의해서 파일과 메모리를 공유하는 것을 허용합니다.

가상 주소 공간

  • 프로세스가 메모리에 어떻게 저장되는 방법에 대한 논리적 뷰
  • 논리적 주소는 0부터 시작하고 이 가상 주소 공간은 연속적인 메모리에 올린 것처럼 존재하게 됩니다.

marshaling

데이터를 네트워크를 통해 전송 가능한 형태로 변환하는 과정
  • 직렬화
    • 데이터를 바이트 스트림으로 변환하는 과정
    • 메모리에 저장된 객체나 데이터를 네트워크를 통해 전송 가능한 형태로 변환하는 작업
  • 데이터 포맷 변환
    • 데이터를 전송에 적합한 형태로 변환하여 상호 운용성을 확보한다.

CPU 스케줄러

notion image
  • 선점 스케줄링(Preemptive)
    • 프로세스가 스케줄러에 의해 CPU를 선점하는 방식 → 강제적
  • 비선점 스케줄링(Non-preemptive)
    • 프로세스가 자율적으로 반납할 때까지 CPU를 선점하는 방식

스케줄링 결정 시점

  • Running → Wating : I/O 요청, wait()요청을 통한 자식 프로세스 종료 - 비선점
  • Running → Ready : 인터럽트 발생 - 선점 or 비선점
  • Wating → Ready : I/O 완료 - 선점 or 비선점
  • Terminate : 부모 프로세스 종료 - 비선점

CPU의 구조

  1. 산술/논리 연산 장치(Arithimetic Logic Unit, ALU)
      • 산술적인 연산과 논리적인 연산을 담당하는 장치로 가산기, 보수기, 누산기, 기억 레지스터, 데이터 레지스터 등으로 구성된다.
      • 캐시나 메모리로부터 읽어 본 데이터는 레지스터라는 CPU전용의 기억장소에 저장
  1. 레지스터(Register)
      • 중앙처리장치 내부에 있는 기억장치
      • 범용 레지스터와 전용 레시스터로 구분 가능
      • IR(Instruction Register) : 현재 수행 중에 있는 명령어 부호를 저장하고 있는 레지스터
      • PC(Program Counter) : 명령이 저장된 메모리의 주소를 가리키는 레지스터
      • AC(Accumulator) : 산술 및 논리 연산의 결과를 임시로 기억하는 레지스터
  1. 제어장치(Control Unit, CU)
      • CPU가 자신 및 주변기기들을 컨트롤하는 장치
      • 프로그램의 수행 순서를 제어한느 프로그램 계수기, 현재 수행중인 명령어의 내용을 임시 기억하는 명령 레지스터, 명령을 해독하여 수행될 장치에 제어신호를 보내는 명령해독기로 이루어짐

명령어

시스템이 특정 동작을 수행시키는 작은 단위
  • 동작 코드(Op-code) : 각 명령어의 실행 동작을 구분하여 표현
  • 오퍼랜드(Operand) : 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치를 의미
수행과정
notion image
  • 읽기(Fetch Instruction, FI) : 메모리에서 명령을 가져온다.
  • 해석(Decode Instruction, DI) : 명령을 해석한다.
  • 실행(Execute Instruction, EI) : 명령을 수행한다.
  • 기록(Write Back, WB) : 수행한 결과를 기록한다.
명령어 처리 방식
RISC(Reduced Instruction Set Computer)는 내부적으로 사용하는 명령어 세트를 단순화 시켜서 처리하는 형태의 구조
  • 하나의 사이클로 명령어를 처리
  • 메모리 Load/Store 명령만 처리하는 방식
  • 복잡한 컴파일러 구조
CISC(Complex Instruction Set Computer)는 하나의 기능에 해당하는 하나의 명령이 있는 개념
  • 여러 사이클로 명령어를 처리
  • 많은 명령어가 메모리를 참조하는 처리 방식
  • 복잡한 마이크로 프로그램 구조를 가짐

RAM

notion image
  • DRAM(Dynamic RAM)
    • 저장된 데이터가 동적으로 사라지는 RAM
    • 데이터 소멸을 막기 위해 주기적으로 재활성화해야(refresh)
    • 일반적으로 메모리로 사용되는 RAM
  • SRAM(Static RAM)
    • 저장된 데이터가 정적인 RAM
    • DRAM보다 일반적으로 더 빠름
    • 일반적으로 캐시 메모리에 사용되는 RAM
  • SDRAM(Synchronous DRAM)
    • 특별한 SDRAM
    • 클럭 신호와 동기화된 DRAM
  • DDR SDRAM(Double Data Rate SDRAM)
    • 특별한 SDRAM
    • 최근 가장 대중적으로 사용
    • 대역폭을 넓혀 속도를 빠르게 만든 SDRAM

사용자 인터페이스

  1. CLI (Command Line Interface) : 문자열로 명령하는 인터페이스를 제공
  1. Batch Interface : 디렉티브가 파일 형태로 입력되고, 파일을 통해 인터페이스를 제공
  1. GUI (Graphical User Interface) : 가장 보편적, 그래픽 요소들을 통해 인터페이스를 제공

시스템 호출(System Calls)

  • API(Applicatoin Programming Interface)를 통해 System Call을 대부분 호출
notion image
  1. 프로세스 제어
  1. 파일 조작
  1. 장치 조작
  1. 정보 유지 보수
  1. 통신과 보호