[운영체제] 면접대비 Overview

Recorder·2021년 8월 14일
1

CS 이론

목록 보기
5/7

프로세스/쓰레드

1. 운영체제 란 무엇입니까?

HW와 SW를 연결하는 시스템 소프트웨어

  • 컴퓨터 자원 관리
  • 프로그램 개발 및 실행을 위한 환경을 제공

2. 프로세스란 무엇을 의미합니까?

메모리에 올라와 실행되고 있는 프로그램의 인스턴스

  • 특징

    • 운영체제로부터 독립된 메모리 영역을 할당받는다. (다른 프로세스의 자원에 접근 X)
    • 프로세스들은 독립적이기 때문에 통신하기 위해 IPC를 사용해야 한다.
    • 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다.
  • 종류

    • 운영 체제 프로세스 : 시스템 운영에 필요한 기능 수행
    • 사용자 프로세스 : 사용자가 실행
    • 백그라운드 프로세스 : 사용자의 입력과 상관없이 수행
    • 포그라운드 프로세스 : 명령입력 후 수행 종료까지 기대려야함
  • context swtiching
    cpu를 다른 프로세스로 할당
    (캐시 초기화 등 무거운 작업 포함)

2-1) 멀티 프로세싱

여러 프로세서가 사용

  • 일반적으로 프로세서 간 메모리 구분

  • 장점

    • 프로세스 중 하나 문제 생겨도, 다른 프로세서 영향주지 않음
  • 문제점

    • Context Switching 자주 발생 시, 오버헤드로 성능저하

오버헤드란(overhead)?
어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다.
예를 들어 A라는 처리를 단순하게 실행한다면 10초 걸리는데, 안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면, 오버헤드는 5초가 된다.

2-2) IPC(Inter-Process Communication)

커널에서 제공하는 프로세스 간의 데이터 통신 수단

  • 종류
    • 파이프 : 2개의 프로세서를 연결 시, 하나의 프로세서는 읽기만하고 하나의 프로세서는 쓰기만 하는, 반이중통신(Half-Duplex). 단방향
      • 같은 부모를 갖는 프로세스 간에만 가능
      • read(), write() 는 기본적으로 block mode. 동시에 작업 불가
      • Full-Duplex 원할 경우, pipe 2개 만들어야 함
    • Named Pipe(FIFO) : 이름이 있는 파일 이용하는 PIPE
      • 부모 프로세스와 무관하게, 전혀 모르는 프로세스 간에도 통신 가능
    • Message Queue : 선입선출 구조의 컨테이너 벨트 형식을 이용한 통신
      • 데이터에 번호를 붙여, 여러 프로세스가 동시에 다룰 수 있음(message)
    • shared memory(공유 메모리) : 프로세스 간에 공동의 메모리를 사용. 이 메모리에 할당받은 프로세스가 쓰고, 다른 프로세스가 접근해서 통신
    • Memory Map : 열린 파일을 메모리에 맵핑 시켜서, 공유 메모리처럼 사용
    • Socket : 흔히 네트워크 통신에서 사용하는 소켓을 통한 통신.

3. 스레드(Thread)는 무엇입니까?

프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위

  • 사용 이유
    • STACK만 따로 할당 받고, 코드/데이터/힙 등 자원 공유
      • 메모리 절약
      • 통신 비용 절감(커널 도움 없이 통신 가능. 시스템콜 안함)
    • 오버헤드 절감
    • 프로세스보다 생성 및 종료 시간 짧음

STACK을 따로 할당하는 이유
Stack을 분리한 이유는 Stack에는 함수의 호출 정보가 저장되는데, Stack을 공유하면 LIFO 구조에 의해 실행 순서가 복잡해지기 때문에 실행 흐름을 원활하게 만들기 위함이다.

3-1) 멀티 스레딩(Multi-threading) 의 장점과 단점은?

멀티 스레딩 : 하나의 프로세스를 다수의 스레드로 실행

장점) 필요한 자원들을 공유 -> 자원의 생성과 관리가 중복되는 것을 줄일 수 있다.

단점) 교착상태를 발생시킬 수 있다. 동기화에 주의해야한다.

5. 스케줄링

필요한 자원을 프로세스에 할당하는 작업

  • 목적
    공정성, 처리율증가, cpu이용률 증가, 우선순위제도, 오버헤드최소화, 응답시간 최소화, 반환 시간 최소화, 대기 시간 최소화, 균형 있는 자원 사용, 무한 연기 회피 등

  • 종류

    • 비선점 스케줄링 non-preemptive
      • 이미 할당된 cpu를 다른 프로세스가 강제로 빼앗아 사용할 수 없다.
      • 모든 프로세스 요구 공정하게 처리
      • 응답 시간 예측 용이
      • 중요한 작업이 중요하지 않은 작업을 기다릴 수 있다.
    • 선점 스케줄링 preemptive
      • 이미 할당된 cpu를 다른 프로세스가 강제로 빼앗아 사용할 수 있다.
      • 우선 순위 높은 것 빠르게 처리
      • 상대적으로 overhead 많음
      • 인터럽트 용 clock 필요

메모리

1. 커널이란 무엇입니까?

운영체제 중 메모리에 상주하는 부분
(다른 부분은 필요할 때만 메모리에 올라가서 동작)

2. 메모리의 구조를 설명하시오.

1) 역알 영역에 따라 나누기

  • 코드영역
    • 실행할 코드 저장
    • 텍스트 영역
  • 데이터 영역
    • 전역변수&정적변수 저장
    • 프로그램 시작과 함께 할당 & 프로그램 종료 시 소면
  • 스택영역
    • 함수 호출과 관계되는 지역변수&매개변수 저장
    • 함수 호출과 함께 할당, 함수 호출 완료되면 소멸
  • 힙영역
    • 사용자가 직접 관리하는 메모리 영역
    • 사용자에 의해 동적 할당 및 해제

동적할당이란?
메모리를 실행시간동안 할당하는 방식이다. 실행이 끝나면 반납하고, 다시 실행할 때 다시 할당한다.

2) 메모리 하이러키 memory hierachy
메모리를 필요에 따라 여러 종류로 나눈 것

cpu와 더 빠른 접근을 위함(자주 사용하는 데이터(locality)를 상위에)
상층 구조일수록 비싸고, 빠르다.

  • CPU 내부
    • 레지스터
      • 프로세서 내부 소규모 데이터 장치. 가장 빠른 메모리
    • 캐시
      • cpu와 주기억 장치 사이, 고속 buffer memory
      • cpu와 메모리의 속도 차이를 맞춰, 데이터 액세스를 빠르게 만듦
      • 최근에 사용된 원본 데이터의 사본을 저장
  • CPU 외부
    • 메모리(주기억장치) : bus 통해 cpu 접근 가능
    • 하드 디스크 : 직접 접근 불가(접근하려면 메모리 거쳐야 해서 매우 느림)

3. locality 구역성, 국부성

실행중일 프로세스가 주기억장치를 참고할 때 일부 페이지만 집중적으로 참고(시간, 공간적으로)

  • 워킹 셋 working set
    프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합

4. 가상메모리 virtual memory

  • 보조 기억 장치의 일부를 마치 주기억장치처럼 사용하여, 용량이 작은 주기억 장치를 마치 큰 용량 처럼 사용
    • 무한한 가상 메모리 형태로, 당장 쓰지 않는 데이터를 보조 기억장치에 넣어두고, 주기억장치엔 매핑주소를 보관한다.
  • 주소 매핑(가상기억장치의 주소를 주기억장치의 주소로 변환) 필요
  • 실제 HW 메모리가 존재하는 것이 아닌, SW적 구현

4-1) 구현 기법

  • paging 페이징
    • 가상메모리와 물리메모리가 동일한 고정 크기의 블록/프레임들로 나누어진다.
    • 사용자는 하나의 주소를 지정한다.
    • HW에 의해 페이지 테이블에는 페이지번호와 시작 물리 주소가 저장된다.
    • 내부 단편화
      항상 할당은 나누어진 프레임의 정수 배 크기로 이루어진다. 이때 프로세스가 프레인의 정수 배가 아닌 크기의 메모리를 요구하게 되면, 페이지 프레임은 전부 사용되지 않고 남는 문제가 발생하게 된다.
  • segmentation 세그멘테이션
    • 가상메모리와 물리메모리가 서로 다른 크기의 네그먼트로 나누어진다.
    • 사용자는 세그먼트 번호와 변위를 지정한다.
    • 세그먼트 테이블에는 세그먼트 시작 물리주소와 세그먼트의 길이가 저장된다.
    • 외부단편화
      서로 다른 크기의 세그먼트들이 메모리에 적재/제거가 반복되면, 자유 공간들이 작은 수의 조각들로 나누어진다. 이때 남은 공간 자체는 충분하지만, 각 공간이 작아서 데이터가 어디에도 들어가지 못하게 될 수 있다.

4-2) 페이지 부제 page fault

프로세스 실행 참고 시, 참조할 페이지가 주기억장치에 없는 현상
(가상기억장치에 위치)

  • 페이지 교체
    • OPT(Optimal Replacement) : 앞으로 가장 오랫동안 사용 안 할 페이지 교체
      • 페이지 호출 및 참조를 미리 예측해야하므로, 실현 가능성 희박
    • FIFO : 가장 오래된 페이지를 교체
      • 벨레이디 모순 발생 : 페이지 프레임 수를 증가했음에도 페이지 부재가 더 많이 일어남
    • LRU : Least Recently Used, 가장 오랫동안 사용하지 않은 페이지를 교체
      • 참조될 때마다 시간 기록 필요. 큰 오버헤드 발생
    • Least Frequently Used, Not Used Recently, Second Chance Replacement 등

4-3) thrashing

  • 프로세스 처리 시간보다 페이지 교체 시간이 더 많아지는 현상
  • 페이지 부재가 자주 발생하며, 전체 시스템 성능이 저하된다.
  • 다중 프로그래밍 정도가 너무 높아지며, CPU 사용률이 오히려 떨어지는 현상이다.

동기화

1. critical section 임계구역이란?

여러 프로세스가 공유하는 데이터 및 자원에 대하여, 한 번에 하나의 프로세스만 접근할 수 있는 자원(영역)

  • 하나의 프로세스가 반납한 후에만 다른 프로세스가 접근 가능
  • 특정 프로세스가 독점하면 안됨

2. Mutual Exclusion 상호배제란?

임계구역을 유지하는 기법

  • 구현방법
    • SW로 구현
    • HW로 구현

3. semaphore 세마포어

  • 특징

    • 프로세스 간의 상보 배제의 원리를 보장하기 위한 기법
    • 다익스트라가 제안
    • p 연산 : 자원 개수 감소. 자원이 점유 되었음을 알림. wait 동작
    • v 연산 : 자원 개수 증가. 대기 중인 프로세스를 깨우는 신호. signal 동작
  • mutex 뮤텍스

    • 상태가 0, 1 뿐인 binary semaphore
    • Thread 간의 상호 배제를 위해 사용
    • 소유 가능

4. 교착 상태, deadlock

서로 다른 쓰레드가, 상대가 가지고 있는 lock이 풀리기를 기다리고 있는 상태

  • 교착상태의 조건

    • 상호배제
      : 프로세스들이 공유 자원에 대한 배타적 통제권
    • 점유대기
      : 프로세스가 특정 자원에 대한 접근 권한을 가진 상태로, 다른 자원에 대한 접근 권한을 요구할 수 있다.
    • 비선점(선취불가능)
      : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
    • 순환대기
      : 여러 프로세스가 자원 접근을 기다리는데 그 관계에 사이클이 존재한다.
  • 교착상태 방지
    위 4가지 조건 중 하나를 제거하면 된다.

5. 동기synchronouse/비동기asynchronous

  • 동기
    서버에 요청을 보냈을 때, 답이 와야 다음 동작을 수행할 수 있다.
  • 비동기
    응답과 무관하게, 다음 동작 수행

1. 시스템콜

응용프로그램 사용 중에 운영체제 커널의 서비스를 호출하여 사용하는 것을 의미한다.

  • 시스템 콜 발생 시
    • 사용자모드에서 커널모드로 전환
    • 시스템자원이나 하드웨어에 엑세스
  • I/O 통신, 파일조작 등

2. 인터럽트

프로그램 수행 도중, 다른 이벤트 수행을 위해 잠시 멈추는 것을 의미한다.

  • 처리과정
    1) 인터럽트 발생 시
    2) pc에 현 상태를 보관
    3) 프로그램 실행을 중지
    4) 그 상태로 인터럽츠를 처리
    5) 끝나면 pc값을 이용해서 이전 위치로 돌아옮
    6) 작업 이어서 진행
  • 종류
    • SW인터럽트
      사용자가 인터럽트 호출 등
    • HW인터럽트
      • 내부 인터럽트 : 잘못된 명령어(프로세서에 정의 되어 있지 않은 명령, n/0 연산 등)
      • 외부 인터럽트 : 기계적(타이머가 시간 초과 등)
profile
기억은 나 대신 컴퓨터가

0개의 댓글