[CS/면접준비] 운영체제

bye9·2021년 3월 23일
1

CS

목록 보기
4/10

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS


프로세스 vs 쓰레드

프로세스

  • 메모리에 적재되어 실행중인 프로그램
  • 프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받게 되는데, 프로세스마다 각각 독립된 메모리 영역, Code/Data/Stack/Heap의 형식으로 할당해준다.

*Stack -> 함수의 매개변수, 복귀 주소, 지역 변수와 같은 임시 자료를 가짐.
*Data -> 전역 변수들을 가짐.
*Heap -> 프로세스 실행 중에 동적으로 할당되는 메모리.

https://dsnight.tistory.com/50

프로세스 제어 블록(Process Control Block, PCB)

특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조이다.

운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB 를 생성 한다. 프로세스는 CPU 를 할당받아 작업을 처리하다가도 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU 를 반환해야 하는데, 이때 작업의 진행 상황을 모두 PCB 에 저장하게 된다. 그리고 다시 CPU 를 할당받게 되면 PCB 에 저장되어있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행한다.

쓰레드

  • 프로세스 내에서 실행되는 실행 흐름의 단위
  • 쓰레드는 프로세스가 할당받은 메모리 영역 내에서 Stack형식으로 할당된 메모리 영역은 따로 할당받고, 나머지는 같은 프로세스 내 다른 쓰레드와 공유한다.

멀티 쓰레딩

  • 하나의 프로세스를 다수의 실행 단위(쓰레드)로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것
  • 메모리 공간과 시스템 자원 소모가 줄어든다.

쓰레드마다 스택을 독립적으로 할당하는 이유

스택은 함수 호출 정보(전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등)를 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다. 따라서 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.


*메모리: 컴퓨터에서 작업을 수행하기 위해 처리 대상이나 결과 등을 저장하기 위한 공간입니다. 프로그램을 실행하기 위한 정보들은 메모리에 저장되어 처리된다.


멀티 프로세스 vs 멀티 쓰레드

멀티 프로세스

  • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 1개의 작업을 처리하도록 하는 것
    장점 - 1개의 프로세스가 죽어도 자식 프로세스 이외의 다른 프로세스들은 계속 실행된다.
    단점 - 많은 메모리 공간과 CPU 시간을 차지한다.

멀티 쓰레드

  • 하나의 프로그램을 여러 개의 쓰레드로 구성하여 각 쓰레드가 1개의 작업을 처리하도록 하는 것
    장점 - 적은 메모리 공간과 Context Switching이 빠르다.
    단점 - 하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받는다.
    - 여러 쓰레드가 하나의 자원에 동시에 접근하는 경우 자원 공유(동기화)의 문제가 발생할 수 있다.

참고
https://mangkyu.tistory.com/92


스케줄러

  • 다중 프로그래밍을 가능하게 하는 것

  • Ready Queue에 존재하는 프로세스들을 특정한 우선순위를 기반으로 CPU를 할당받게 해주는 역할
    (Ready Queue: 현재 메모리 내에 있으면서 CPU 를 잡아서 실행되기를 기다리는 프로세스의 집합)

  • 목적: CPU 활용을 최대화, 평균 대기 시간을 최소화, 처리량을 최대화.

FCFS(First Come First Served)

특징

  • CPU를 처음 요구한 프로세스가 CPU를 처음 사용한다.
  • 비선점형(Non-Preemptive) 스케줄링
    프로세스가 CPU를 사용하고 있다면 놓아줄 때까지 CPU를 다른 프로세스에게 양보하지 않는다.

문제점

  • Convoy 효과
    CPU 처리 시간이 긴 프로세스가 도착하게 되면, 다른 프로세스가 한없이 기다려야 하기 때문에 비효율적인 문제

SJF(Shortest Job First)

특징

  • 가장 시간이 적게 걸리는 프로세스를 먼저 선택하여 실행한다.
  • 비선점형(Non-Preemptive) 스케줄링

문제점

  • starvation(기근)
    CPU 처리 시간이 긴 프로세스의 경우 처리 시간이 짧은 프로세스가 계속해서 들어온다면 끝없이 CPU를 할당받을 수 없는 문제

SRTF(Shortest Remaining Time First)

특징

  • 현재 수행중인 프로세스의 남은 처리 시간이 가장 짧은 프로세스를 먼저 선택하여 실행한다.
  • 선점형 방식
  • 평균 대기 시간이 가장 짧은 스케줄링 방식

문제점

  • starvation
  • 잦은 문맥교환에 따른 오버헤드가 커진다.
  • CPU 사용 시간을 예측하기가 힘들다.

Priority 스케줄링

특징

  • 우선순위가 가장 높은 프로세스에게 CPU를 할당하는 방식.

문제점

  • starvation
    우선순위가 낮은 프로세스는 영원히 작동하지 않을 수 있다.

해결책

  • Aging 기법
    오랜 시간을 기다린 프로세스는 우선순위를 높여주는 기법

Round Robin

특징

  • 각 프로세스는 동일한 할당 시간(time quantum)을 가지며, 할당 시간이 지나면 프로세스는 선점당하고 Ready Queue의 맨뒤로 다시 들어가게 된다.
  • 모든 프로세스가 최초 응답 시간을 빠르게 보장받을 수 있다.
    (n 개의 프로세스가 ready queue 에 있고 할당시간이 q(time quantum)인 경우 각 프로세스는 q 단위로 CPU 시간의 1/n 을 얻는다. 즉, 어떤 프로세스도 (n-1)q time unit 이상 기다리지 않는다.)
  • 설정한 할당 시간(time quantum)이 너무 커지면 처리 시간이 긴 프로세스에 의해 CPU의 효율성이 떨어질 수 있다.
  • 너무 작아지면 잦은 문맥 교환으로 인한 오버헤드가 커진다.

참고
https://thinkpro.tistory.com/122
https://bnzn2426.tistory.com/65


동기 vs 비동기

동기(synchronous)방식

  • 요청을 보내고 실행이 끝나면 다음 요청을 처리하는 방식
  • 순서에 맞추어 진행되기 때문에 제어하기 쉽다.
  • 여러가지 요청을 동시에 처리할 수 없어 효율이 떨어진다.
  • 예시) 콜센터 종업원이 일을 처리하는 방식이 될 수 있다. 콜센터의 직원은 한 손님의 전화 응대가 끝난 후에 다음 손님의 응대를 진행할 수 있다.

비동기(Asynchronous)방식

  • 요청을 보내고 해당 동작의 처리 여부와 상관없이 다음 요청을 처리하는 방식
  • 작업이 완료되는 시간을 기다릴 필요가 없기 때문에 자원을 효율적으로 사용할 수 있다.
  • 작업이 완료된 결과를 제어하기 어렵다.
  • 예시) 이메일, 우리는 한 사람에게 이메일을 보냈을 때 답변을 받지 않고도 이메일을 다시 보낼 수 있다.

프로세스 동기화

Critical Seciton(임계영역)

  • 멀티쓰레딩의 문제점으로 동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역을 말한다.

해결책

Lock

하드웨어 기반 해결책으로써, 동시에 공유 자원에 접근하는 것을 막기 위해 Critical Section 에 진입하는 프로세스는 Lock 을 획득하고 Critical Section 을 빠져나올 때, Lock 을 방출함으로써 동시에 접근이 되지 않도록 한다.

Mutex(뮤텍스) vs Semaphore(세마포어)

공통점: 소프트웨어상에서 Critical Section 문제를 해결하기 위한 동기화 도구
(공유 자원에 여러 프로세스나 쓰레드가 동시에 접근하는 것을 제어하기 위한 방법)

Mutex(뮤텍스)

Locking 메커니즘으로 오직 1개의 쓰레드만이 동일한 시점에 임계 영역(Critical Section)에 들어올 수 있다.(락을 걸 수 있다.) 그리고 오직 이 쓰레드만이 임계 영역에서 나갈 때 락을 해제할 수 있다.
(ex 이디야 화장실 키)

  • 공유 자원에 오직 1개만의 프로세스(쓰레드)만 접근할 수 있다.
  • 락을 획득한 프로세스(쓰레드)만 락을 해제할 수 있다.

Semaphore(세마포어)

  • 동시에 리소스에 접근할 수 있는 카운터의 개수
    Signaling 메커니즘으로 락을 걸지 않은 쓰레드도 락을 해제할 수 있다.

Counting Semaphores, Binary Semaphore 2종류가 있다.
카운팅 세마포어는 세마포어의 카운트가 양의 정수값을 가지며, 설정한 값만큼 쓰레드를 허용하고 그 이상의 쓰레드가 자원에 접근하면 락이 실행된다.
바이너리 세마포어는 세마포어의 카운트가 1이며 Mutex처럼 사용될 수 있다.
(ex 휴게소 화장실 빈자리 표시)

  • 공유 자원에 세마포어 값만큼 프로세스(또는 쓰레드)가 접근할 수 있습니다.

  • 다른 프로세스(쓰레드)가 세마포어를 해제할 수 있습니다.

  • Dead Lock(데드락)문제
    둘 이상의 프로세스가 Critical Section 진입을 무한정 기다리고 있고, Critical Section 에서 실행되는 프로세스는 진입 대기 중인 프로세스가 실행되야만 빠져나올 수 있는 상황

참고
https://worthpreading.tistory.com/90
https://mangkyu.tistory.com/104
https://velog.io/@conatuseus/OS-%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4%EC%99%80-%EB%AE%A4%ED%85%8D%EC%8A%A4
https://dailyheumsi.tistory.com/133


단편화

  • 프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용 하지 못할 만큼의 작은 자유공간들이 늘어나게 되는데, 이것이 단편화이다.

외부 단편화

  • 메모리 공간 중 사용하지 못하는 공간들을 모두 합치면 충분하지만, 공간이 되는 부분들이 분산되어 있을때 실제로 그 작업을 받아 들이지 못하는 경우 발생한다.

  • 압축: 외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유공간을 확보하는 방법론 이지만, 작업효율이 좋지 않다.

Paging(페이징기법)-외부 단편화 해결, 내부 단편화 존재

  • 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법
  • 외부 단편화와 압축 작업을 해소 하기 위해 생긴 방법론
  • 물리 메모리는 Frame 이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리된다.
  • 페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결할 수 있는 큰 장점

내부 단편화

-메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 남은 메모리 공간이 낭비되는 현상

Segmentation(세그멘테이션기법)-내부 단편화 해결, 외부 단편화 존재

  • 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할
  • 단점 : 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 자유 공간들이 많은 수의 작은 조각들로 나누어져 못 쓰게 될 수도 있다.(외부 단편화)

참고
https://junghyun100.github.io/%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%8B%A8%ED%8E%B8%ED%99%94/


가상 메모리

  • RAM의 부족한 용량을 보완하기 위해, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 방식.
  • OS는 프로세스들의 내용(페이지) 중에서 덜 중요한 것들을 하드디스크에 옮겨 놓고, 관련 정보를 페이지 테이블에 기록합니다.
  • CPU는 프로세스를 실행하면서 페이지 테이블을 통해 페이지를 조회하는데, 실제메모리에 원하는 페이지가 없는 상황이 발생할 수 있습니다. -> 페이지 폴트

페이지 교체

  • 페이지 폴트가 발생하면 프로세스가 동작하면서 실제메모리에 필요한 데이터(페이지)가 없으면 가상메모리를 통해서 해당 데이터를 가져오게 됩니다. -> 페이지 교체
  • 가상메모리는 하드디스크에 저장되어 있기 때문에, 페이지폴트가 발생하면 I/O에 의한 속도의 저하가 발생합니다.

페이지 교체 알고리즘

FIFO

  • 메모리가 할당된 순서대로 페이지 교체
  • 먼저 물리 메모리에 들어온 페이지 순서대로 페이지 교체 시점에 먼저 나가게 된다는 것이다.

OPT(Optimal replacement)

  • 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체

LRU(Least Recently Used)

  • 최근에 가장 오랫동안 사용되지 않은 페이지를 교체(시간적)

LFU(Least Frequently Used)

  • 사용 빈도가 가장 적은 페이지를 교체(사용 횟수)

참고
https://m.blog.naver.com/PostView.nhn?blogId=xowns4817&logNo=221226671491&proxyReferer=https:%2F%2Fwww.google.com%2F


Context Switching

  • 인터럽트를 발생시켜 CPU에서 실행중인 프로세스를 중단하고, 다른 프로세스를 처리하기 위한 과정입니다.
  • 현재 실행중인 프로세스의 상태(Context)를 먼저 저장하고, 다음 프로세스를 동작시켜 작업을 처리한 후에 이전에 저장된 프로세스의 상태를 다시 복구합니다.

* 인터럽트: CPU가 프로세스를 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요함을 CPU에게 알리는 것을 말합니다.

2개의 댓글

comment-user-thumbnail
2021년 3월 24일

여기 블로그 정리되서 있는 것만 보고 가도 면접은 걱정 없을거 같네요.
도움 많이 받고 갑니다. 고마워요

1개의 답글