Lesson 25. 운영체제의 개념

운영체제 (Operating System)

  • 정의
    : 컴퓨터 시스템의 각종 자원을 보다 효율적으로 관리하고 운영하는 시스템 소프트웨어
    하드웨어와 사용자(응용프로그램) 간의 중재자 역할을 수행하는 시스템 프로그램

가상머신 (Virtual Machine)

  • 정의 : 컴퓨팅 환경을 소프트웨어로 구현한 것. 가상의 컴퓨터
  • 특징 : 프로세스 가상머신 / 시스템 가상머신으로 나뉨.
    • 프로세스 가상머신 : 하나의 프로세스만을 위해 생성, 그 프로세스의 수행이 끝나면 없어짐
    • 시스템 가상머신 (하드웨어 가상머신) : 완전한 시스템 플랫폼 제공, 완전한 OS의 실행 지원

운영체제의 기능상 분류

  1. 제어 프로그램 (Control Program)

    1. 감시 프로그램 : OS에서 가장 중심적인 프로그램. 시스템의 모든 동작 상태를 관리감독. 인터럽트의 원인 분석, 처리, 작업(task0의 생성 및 제거 담당
    2. 데이터 관리 프로그램 : 주기억장치와 보조기억장치 사이의 자료 전송, 파일의 조작 및 처리, 입출력 자료와 프로그램 간의 논리적 연결 등 시스템에서 취급하는 파일과 데이터를 표준적인 방법으로 처리할 수 있도록 관리하는 역할
    3. 작업 제어 프로그램 : 어떤 업무를 처리하고 다른 업무로의 이행을 자동적으로 수행하기 위한 준비 및 그 처리 완료를 담당하는 기능 수행. 작업의 연속 처리를 위한 스케쥴 및 시스템 자원 할당 등 담당
  2. 처리 프로그램 (Processing Program)

    1. 언어 번역 프로그램 : 프로그래밍 언어로 작성된 파일을 기계어로 번역하는 역할
    2. 서비스 프로그램 : 사용빈도가 높은 프로그램들을 시스템 제공자가 미리 작성하여 사용자에게 제공해주는 프로그램. 시스템 서비스 프로그램 & 사용자 서비스 프로그램 등으로 구성

시스템 소프트웨어의 사례

  1. 어셈블러 : 어셈블리어를 기계어로 번역해주는 역할
  2. 컴파일러와 인터프리터

매크로

  • 정의 : 반복되는 부분을 한 개의 이름으로 묶어 사용자가 편리하게 사용할 수 있게 하는 문장

링커 Linker

  • 서브프로그램과 주프로그램을 연결해주는 컴퓨터 시스템 프로그램. 다른 곳에서 작성된 프로그램 루틴이나 컴파일 또는 어셈블된 루틴들을 모아서 실행 가능한 하나의 루틴으로 연결
  • 링킹 Linking : 목적 모듈 Object Module을 하나의 실행 가능한 프로그램으로 연결시켜주는 작업

로더 Loader

  • 정의
    : 컴퓨터 내부로 정보를 읽어 오거나 외부 기억장치로부터 정보들을 주기억장치 내에 적재하는 프로그램. 어떤 정보가 기억장치의 어느 부분에 적재되어 있는지 추척하기도 함.

  • 기능

    • 주기억장치 할당 : 프로그램이 들어갈 기억장소 배정
    • 링킹 : 외부 프로그램 연결
    • 재배치 : 실제 기억 장소에 대응되도록 프로그램 주소를 재배치. 상대주소 -> 절대주소로 변경
    • 로딩 : 프로그램, 데이터를 메모리에 적재
  • 종류 : 절대 로더, 상대(재배치) 로더

Lesson 26. 운영체제의 종류, 입출력 방법

운영체제의 종류

  1. 일괄처리 시스템 : 모아서 한꺼번에 처리
  2. 다중 프로그래밍 시스템 : CPU의 효율 극대화를 위해 CPU 1개에 여러 개의 프로그램을 적재하여 멀티태스팅 구현
  3. 시분할 시스템 (TSS, Time Sharing System) : 각 사용자들에게 CPU에 대한 일정 시간(time slice)을 할당. Round-Robin 방식
  4. 다중처리 시스템 : CPU가 여러개, 기억 장소에 여러개의 프로그램이 존재하여 멀티태스킹 구현
  5. 실시간 시스템 : 처리요구 자료가 발생할 때마다 즉시 처리
  6. 분산처리 시스템 : 하나의 대형 컴퓨터에서 수행하던 기능을 지역적으로 분산된 여러 개의 미니컴퓨터에 분담, 통신망을 통하여 상호간에 교신 / 처리하는 방식

입출력 방법

  1. 버퍼링 : 한 작업의 계산과 함께 입출력을 동시에 수행. CPU와 입출력장치는 동시에 동작, 양쪽의 속도가 비슷하면 버퍼 이용이 효율적. 보통 CPU가 더 빠르므로 실행속도는 입출력장치 속도에 의해 제한. 주기억장치에 위치. 스택/큐 방식으로 입출력 수행

  2. 스풀링 : 디스크의 일부를 스풀 공간이라고 부르는 매우 큰 버퍼처럼 사용하는 방식. 입출력장치와 CPU 속도 차이 해소를 위해 사용. 디스크에 위치. 큐 방식으로 입출력 수행.

Lesson 27. 프로세스와 스레드의 개념

프로세스

  • 정의
    : CPU에 의해 수행되는 시스템 및 사용자 프로그램. 프로그램 + 입출력 상태 형태

  • 스케쥴러

    • 스풀러 : 제출된 작업들을 디스크에 수록하여 보류 상태로 만듦
    • 작업 스케쥴러 : 보류 상태의 작업들 중 실행될 작업을 선정하여 대응되는 프로세스로 만들어 보류 상태 -> 준비 상태로 전환
    • 프로세스 스케쥴러 : 준비 상태에 있는 여러 프로세스 중 실행될 한 프로세스를 선정하여 CPU를 할당, 프로세스는 준비 상태 -> 실행 상태로 전환(Dispatch)
  • 프로세스가 전이되는 시기와 이유

    • 디스패치(Dispatch) : 준비 상태 -> 실행 상태
      : 우선순위가 제일 높은 프로세스를 선정하여 CPU 할당
    • 할당시간 초과 (Time Run out) : 실행 상태 -> 준비 상태
      : 지정된 CPU의 할당시간을 모두 사용한 프로세스는 다른 프로세스가 CPU를 선점하고, 그 프로세스는 준비 상태로 전환
    • 대기 (Block) : 실행 상태 -> 대기 상태
      : 인터럽트 만났을 때
    • 깨움 (Wake Up) : 대기 상태 -> 준비 상태
      : 입출력 완료를 기다리다가 입출력 완료 신호가 들어온 것!
  • 프로세스 제어 블록 (PCB)

    • 정의 : 운영체제에게 프로세스에 대한 모든 정보를 제공해주는 자료구조 테이블
      운영체제가 CPU를 다른 프로세스에 넘겨주고자 할 때, 프로세스에 관한 모든 정보를 PCB에 저장시키고 나서 다시 실행하고자 할 때, PCB에 보관된 정보를 재사용

스레드

  • 정의
    : 프로세스의 실행 부분 담당. 실행의 기본 단위
    각각의 스레드는 독립적인 제어흐름을 갖고 자신만의 스택, 레지스터를 갖음
    프로세스와 마찬가지로 스레드들도 중앙처리장치 공유
    준비, 블록, 수행, 종료 등 여러 상태 중 하나로 있을 수 있음
    하나의 프로세스 내 여러 스레드 존재 가능.

  • 구조

    • 공유 영역 : 코드, 정적/전역 데이터, 힙, 커널 데이터 등 프로세스가 가진 자원 —> 빠른 문맥 교환이 가능하게 함
    • 사유 영역 : 스택, 프로그램 카운터, 레지스터 집합
  • 다중 스레드의 장점

    • 응답성
    • 자원 공유
    • 경제성
    • 다중 처리기 구조의 활용

스레드의 구현 방법

  1. 커널 수준(시스템 호출) 스레드
  2. 사용자 수준(라이브러리 호출) 스레드

스레드의 장단점

  1. 장점

    1. 레지스터 집합 교환은 여전히 필요하나, 레지스터 집합 교환과 관련된 메모리 관리가 필요 없어짐
    2. 단일 프로세서 시스템의 효율성 증대. 입출력 대기 시 프로세스 전체가 블록되지 않고 해당 스레드만 블록되고 다른 스레드는 사용 가능
    3. 다중 프로세서 시스템의 효율 증대. 작업 중 비동기적으로 처리하는 것이 자연스러운 부분은 스레드로 처리하면 편리
    4. 병렬적인 문제의 구조를 병행 프로그래밍으로 편리하게
    5. 프로그램 작성, 설계의 용이성 향상, 유지보수성 향상
  2. 단점

    • 동기화가 확실하지 않은 경우, 경쟁상태, 교착상태가 발생
    • 스레드의 동기화, 상호작용을 정이할 필요가 생겨 구조가 복잡해짐
    • 연산 위주의 스레드만으로 구성된 프로세스는 스레드의 특성을 이용하지 못함

Lesson 28. 프로세스 스케줄링

프로세스 스케줄링

  • 정의 : CPU 자우너을 언제, 어느 프로세스에게 배당할 것인가를 결정하는 작업
  • 성능 기준
    1. CPU 이용률 : CPU 수행 시간 또는 시스템 구동 시간
    2. 처리량 : 단위 시간당 완료되는 프로세스 수
    3. 대기 시간 : 준비 큐에서 대기하는 시간
    4. 응답 시간 : 작업을 제출한 후 첫 응답이 올 때까지의 시간
    5. 반환 시간 : 프로세스가 시스템에 진입하여 완료되기까지의 시간

방법별 분류

  1. 선점 스케줄링 : 한 프로세스가 CPU를 차지하고 있을 때 다른 프로세스가 현재 프로세스를 중지시키고 자신이 CPU를 차지할 수 있다.
    RR, SRT(Shortest-Remain-Time), MLQ(MultiLevel Queue), MFQ(Multilevel Feedback Queue), 우선순위 스케줄링 등이 있다

  2. 비선점 스케줄링 : 한 프로세스가 CPU를 할당받으면 CPU는 그 프로세스로부터 빠져나올 수 없다. FIFO, SJF(Shortest-Job-First), HRN(Highest Response Time), 우선순위 스케줄링 등이 있다

Lesson 29. 프로세스 간 동기화

임계 영역 Critical Section

  • 정의
    : 하나의 프로세스가 수정 가능한 공유 자원을 액세스하고 있을 때, 그 프로세스에 의해 참조되는 프로그램의 부분.
    하나의 프로세스가 공유 데이터를 접근하면 다른 프로세스는 그 공유 데이터를 접근해서는 안됨 (무결성 보장)
    임계 영역을 수행 중에 있는 프로세스는 인터럽트, 교착상태, 무한반복이 발생하면 X

  • 코드 지역(영역)

    • 진입 영역, 진출 영역, 잔류 영역
  • 요구 조건

    • 상호배제 조건
    • 제한된 대기 조건 (무한히 기다리는 바쁜 대기 방지)
    • 진행 조건
  • 동기화(상호배제) 기법

    1. 데커 알고리즘
    2. 세마포어
    3. 모니터

Lesson 30. 교착상태

교착상태 Deadlock

  • 정의
    : 다중 프로그래밍 시스템에서 아무리 기다려도 결코 일어나지 않을 사건을 기다리고 있는 하나 또는 그 이상의 프로세들이 있는 상태

  • 교착상태의 4가지 필요조건

    1. 상호 배제
    2. 점유와 대기
    3. 비선점
    4. 환형 대기
  • 교착상태의 해결 기법

    1. 예방
    2. 회피
    3. 발견
    4. 회복

Lesson 31. 기억장치 할당기법과 관리정책

기억장치

  1. 주기억장치 (Main Memory)
    : CPU가 명령이나 자료를 직접 인출, 반환할 수 있는 장치. CPU가 보조기억장치에 있는 프로그램이나 데이터를 참조하기 위해선느 먼저 주기억장치로 옮겨와야 함

    • 할당기법
      • 고정(정적) 분할
      • 가변(동적) 분할
  2. 가상기억장치 (Virtual Memory)
    : 주기억장치의 이용 가능한 기억 공간보다 훨씬 큰 주소 지정을 할 수 있게 해줌. 디스크를 주기억장치의 확장된 공간으로 이용. 주기억장치의 용량에 제한받지 않고 보조기억장치의 용량에 해당하는 커다란 기억 장소를 갖고 있는 것처럼 프로그램 작성 가능

    • 할당기법
      • 페이징
      • 세그멘테이션
      • 페이징/세그멘테이션 혼용
  3. 단일 사용자 시스템

  4. 다중 프로그래밍 시스템

다중사용자 기억장치 할당 기법

  1. 고정(정적) 분할 기억 장치
    : 주기억장치 사요자 영역을 여러 개의 고정된 크기로 분할하여 관리

    1. 내부 단편화 (Internal Fragmentation)
      : 하나의 분할 영역에 작업을 할당하고 남은 빈 공간을 의미
    2. 외부 단편화 (External Fragmentation)
      : 기억장치가 너무 많은 수의 매우 작은 공간들로 단편화되어 있어 공간 중 일부를 사용할 수 없는 경우. 어떤 요구를 만족시킬 수 있는 충분한 전체 기억 공간은 남아 있지만 공간이 연속되어 있지 않았을 때 발생
  2. 가변(동적) 분할 기억장치

    • 정의
      : 주기억장치 사용자 영역을 각 작업에게 가장 합리적인 분할의 크기를 결정하여 주기억장치를 할당하하는 기법
      고정된 분할의 경계를 없애고 각 작업에 필요한 만큼의 기억장치를 할당. (내부 단편화는 발생X, 외부 단편화 발생 가능O)

기억장치 관리 정책

  1. 반입(Fetch) 정책 : 자료를 언제 When 가져올지
    1. 요구 반입 정책
    2. 예상 반입 정책
  2. 배치(Placement) 정책 : 자료를 어느 곳 Where에 적재할지
    • 페이징 시스템은 배치기업이 불필요 (주기억장치에 적재될 페이지가 주기억장치의 가용 페이지 프레임 어디에 적재되어도 무관하므로)
  3. 교체(Replacement) 정책 : 어떤 Who 프로그램을 제거할지

Lesson 32. 가상기억장치의 구현

가상기억장치

  • 정의
    : 하나의 프로그램을 여러 개 블록 또는 조각으로 나누어 주기억장치 내에 분산시켜 배치하는 방식 (조각들은 반드시 인접할 필요X)
    프로그램의 일부분만 주기억장치에 적재되므로 보다 많은 프로세스들이 주소공간을 활용할 수 있게 되어 다중 프로그래밍 정도가 높아지고 CPU와 기억장치의 활용도를 높일 수 있다. (개별 프로그램의 응답시간이 빨라지는 것은 XXX)
  • 동작 원리
    : 가상기억공간과 실기억공간을 연결하는 주소 매핑 Mapping 과정이 필요

가상기억장치의 구분

  1. 구현 방법에 따라

    • 페이징 Paging : 블록 사이즈가 동일한 방식, 외부 단편화 발생X, 내부 단편화 발생 가능O
    • 세그멘테이션 Segmentation : 블록 사이즈가 가변적인 방식, 내부 단편화 발생X, 외부 단편화 발생 가능O
    • 페이징/세그멘테이션 혼용
  2. 사상표 색인을 찾는 방법에 따라

    • 직접 사상 방법 : 페이지 사상표는 주기억장치에 있음

    • 연관 사상 방법 : 빠른 주소 변환을 위해 고속의 연관기억장치를 이용하여 페이지 사상표 전체를 넣는 방법. 가장 빠르고 융통성 있는 사상 구조

    • 직접/연관 사상 혼용 방법

  3. 블록 사상

Lesson 33. 페이지 교체 기법

교체 기법 (Replacement Strategy)

Lesson 34. 파일관리 시스템

Lesson 35. 분산처리 시스템

Lesson 36. 유닉스

profile
함께 일하고 싶은 개발자가 되기 위해 노력합니다. 코딩테스트 관련 공부 및 이야기는 티스토리에도 업로드되어 있습니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN