Jeomxon's Tech Note

운영체제 정리 - 2주차 본문

카테고리 없음

운영체제 정리 - 2주차

저문(jeomxon) 2023. 9. 22. 23:50

1. 프로그램에 대해 설명해주세요

프로세스의 생성 및 실행 규칙들로 엮어진 파일
어떤 계산(일)을 하기 위해, 어떤 프로세스들을, 어떤 순서로 진행해야할 지를 미리 정해놓은 것이다.
컴퓨터가 특정 작업을 수행하도록 지시하는 일련의 명령어와 데이터의 집합을 의미한다.

2. 프로세스에 대해 설명해주세요.

컴퓨터에서 실행 중인 프로그램 또는 작업의 인스턴스를 나타낸다.
즉, 메모리에 로드된 프로그램의 실행환경을 나타내며, 컴퓨터에서 실행되는 작업의 단위이다.

1, 2를 통들어 정리하자면 디스크 등에 일련의 파일 등의 형태로 저장되어있는 프로그램이 실행상태가 되면
메모리에 올라가게 되고, 이때 프로세스로서 동작한다.

3. 프로세스의 메모리 공간에 대해 설명해주세요.

각 프로세스는 독립적인 메모리 공간을 가진다.
프로세스가 가지는 메모리 공간은 내부적으로 여러 부분으로 나눌 수 있다.

  • code영역
    실행할 프로그램의 코드가 저장되는 영역.
    CPU는 code영역에서 명령어를 가져와서 처리한다.
  • data영역 + BSS(Block State Symbol)
    전역변수와 정적변수가 저장된다.
    프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸된다.
    BSS에는 초기화되지 않은 전역 변수가 저장된다. 초기화된 전역변수는 data영역에 저장된다.
    왜 구분되어 저장되는걸까?
  • stack영역
    지역변수, 매개변수, 리턴 값등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.
    프로그램 실행 중에 함수 호출과 관련된 정보가 저장된다.
    FIFO로 동작한다.
    함수 호출 시 stack에 push되고, 반환 시에 pop된다.
    컴파일 타임 시에 stack의 크기가 결정된다.
  • heap영역
    동적 데이터 영역이다. 따라서 런타임 시에 힙의 크기가 결정된다.
    메모리 주소 값에 의해 참조되고 사용되는 영역이다.
    개발자가 직접 할당하거나 해제할 수 있어서 메모리 릭이 발생할 수 있는 여지가 있다.

4. 쓰레드에 대해 설명해주세요.

프로그램의 실행 단위로 프로세스 내부에서 실행된다.
메모리 내에서 독립적인 공간을 가지는 프로세스와 달리, 프로세스 내부에서는 쓰레드 간의 공유 메모리 공간을 가질 수 있다.
따라서 동일한 프로세스 내부에서는 여러 쓰레드가 동시에 실행될 수 있다.

5. 프로세스와 쓰레드의 차이를 예시를 들어 설명해주세요

웹 브라우저를 예시로 들 수 있습니다.
웹 브라우저는 하나의 프로세스로 실행이 됩니다.
브라우저 내부에서 탭들은 각각의 쓰레드로 실행이 됩니다.
이때 각 탭들은 쓰레드로 실행되기 때문에 탭 간의 정보 공유가 가능합니다.
예시) 로컬 스토리지, 쿠키, 세션 등

6. 쓰레드의 메모리 공간(스택, 데이터, 코드)에 대해 설명해주세요.

프로세스는 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유를 하지 않지만,
쓰레드는 해당 쓰레드를 위한 스택을 생성할 뿐 그 이외의 Code, Data, Heap영역을 공유한다.
스택을 쓰레드마다 따로 생성하는 것은 각 쓰레드 별로 독립적으로 함수를 호출할 수 있다는 것을 의미한다.

7. 프로세스 제어블록(PCB)에 대해 설명해주세요.

운영체제가 프로세스를 관리하고 제어하기 위해 사용하는 데이터 구조이다.
PCB는 각 프로세스마다 하나가 존재하며, 해당 프로세스의 상태와 실행정보를 저장한다.

8. 쓰레드 제어블록에 대해 설명해주세요.

9. 멀티 프로세스에 대해서 설명해주세요.

두개 이상의 다수의 프로세서가 협력적으로 하나 이상의 작업을 동시에 처리하는 것이다.
각 프로세스 간에 메모리를 독립적으로 사용하기 때문에 안전성이 높다는 장점이 있지만,
작업량이 많아 컨텍스트 스위칭이 자주 일어날수록 그만큼의 오버헤드가 생겨 성능저하가 발생할 수 있다.

10. 컨텍스트 스위칭에 대해서 설명해주세요.

CPU는 한번에 하나의 프로세스만 실행이 가능하다.
CPU에서는 여러 프로세스에 있는 작업을 처리하기 위해서 프로세스를 순회해야하는데 이를 컨텍스트 스위칭이라고 한다.
이때 단순 순회만 하는 것이 아닌 이전 프로세스의 상태를 저장하고 다음 프로세스의 저장된 상태를 불러오는 과정을 포함한다.

  1. 현재 실행 중인 프로세스의 실행 중단
  2. 다음 실행할 프로세스 선택
  3. 선택된 프로세스의 상태 복원
  4. 프로세스 실행 재개

10-1. 컨텍스트 스위치는 언제 발생하나요?

  • 프로세스, 쓰레드의 시간 할당량이 만료되는 경우
  • 인터럽트가 발생하는 경우
  • 시스템 콜이 발생하여 커널모드로 전환되는 경우

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

멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만,
멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.
멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 컨텍스트 스위칭이 빠르다는 장점이 있지만,
동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.
두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만,
각각의 장단점이 존재하기 때문에 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.

12. fork() 명령어에 대해 설명해주세요.

fork()는 시스템 콜 중 호출되면 새로운 프로세스가 생성된다.
단순 새로운 프로세스를 생성하는 것이 아닌 현재 실행 중인 프로세스를 복제하여 자식 프로세스를 생성한다.
따라서 거의 동일한 코드와 데이터를 공유하지만, 별도의 메모리 공간에서 실행된다.
또한 즉시 프로세스가 생성되기 때문에 거의 동시에 실행된다. 따라서 실행 순서는 랜덤이다.

fork()를 호출하면 자식 프로세스는 0을 리턴하고, 부모 프로세스는 자식 프로세스의 pid를 리턴한다.
즉, 두번의 리턴이 발생한다.