본문 바로가기
CS

신입 개발자 CS 면접 대비 질문-운영체제 #1

by Rudy 2023. 1. 30.

* CS면접을 대비해서 공부한 내용들을 정리했습니다. 틀린 부분이 있을 수 있으니 그럴 경우 댓글 달아주시면 감사하겠습니다!

* 분야는 운영체제, 데이터베이스, 네트워크, 자바, 자료구조 등등 가리지 않고 했기 때문에 여러 과목과 내용이 섞여 있습니다.

* 모든 내용은 간단하게 익히기 위해서 얕게 적혀 있습니다. 깊은 내용은 따로 공부하길 권장드립니다.


프로세스

컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다. 프로세스는 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉜다.

  • 코드 영역: 프로그램을 실행시키는 실행 파일 내의 명령어가 위치
  • 데이터 영역: 전역 변수, 정적 변수가 위치
  • 힙 영역: 동작할당을 위한 메모리 영역(new())
  • 스택 영역: 지역 변수, 파라미터가 위치

 

프로세스 상태

new: 프로세스가 생성된 상태

ready: 프로세스가 CPU로부터 메모리 공간을 할당받길 기다리는 상태

running: 명령어들이 실행되는 상태

waiting: 특정 event가 발생하길 기다리는 상태

terminated: 프로세스가 실행을 끝마친 상태

 

프로그램

명령어들의 모음을 포함한 디스크에 저장된 파일

 

PCB

운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장해두는 구조체이다.

 

문맥 교환

동작 중인 프로세스의 상태를 PCB에 저장하고 다음 프로세스의 상태를 적재하는 작업이다. CPU는 한 번에 한 프로세스만 실행 가능하기 때문에 CPU에서 돌아가면서 작업을 처리하는 과정이다.

 

스레드

프로세스 내부의 CPU 수행 단위이다.

 

스레드의 단점

스택을 제외한 모든 부분을 공유하기 때문에 동기화 문제가 발생할 수 있으며, 하나의 스레드에 문제가 생기면 다른 스레드에 영향이 갈 수 있다. 또한, 구현이 까다롭다.

 

스레드의 장점

프로세스보다 생성비용이 적고, 스택 부분을 제외한 모든 영역을 공유해서 자원을 효율적으로 사용할 수 있다. 또한, 멀티 코어 환경에서 서로 다른 스레드가 서로 다른 CPU에서 병렬적으로 처리되어 높은 처리율과 성능 향상을 기대할 수 있다.

 

프로세스 vs 스레드

프로세스는 완벽히 독립적이기 때문에 메모리 영역(코드, 데이터, 힙, 스택)을 다른 프로세스와 공유하지 않는다. 프로세스는 최소 1개의 스레드를 가지고 있다.

스레드는 프로세스 내에서 스택만 따로 할당 받고, 그 이외의 메모리 영역을 공유하기 때문에 다른 스레드의 실행 결과를 즉시 확인할 수 있다. 스레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행된다.

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당받은 작업을 이용하는 실행의 단위이고 프로세스 내에 여러개가 생길 수 있다.

 

멀티 프로세스

여러 개의 프로세스가 서로 협력적으로 일을 처리하는 것으로 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용한다.

 

멀티 프로세스의 장점

독립된 구조여서 안정성이 높고, 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 끼치지 않는다. 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 CPU가 이를 공유하면 비용적으로 저렴해진다.

 

멀티 프로세스의 단점

멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다. 또한, 독립된 메모리 영역이어서 작업량이 많을 수록 오버헤드가 발생해 성능 저하가 발생할 수 있다.

 

멀티 스레드

하나의 작업을 위해 프로세스에서 여러 스레드를 생성해 여러 CPU 코어를 사용하기 위한 작업

 

멀티 스레드의 장점

시스템 자원 소모가 감소해서 자원의 효율성이 증가하고, 처리 비용이 감소한다. 또한 스레드 사이의 작업량이 적어서 문맥 교환도 빨라서 캐시 메모리를 비울 필요가 없다.

 

멀티 스레드의 단점

자원을 공유하기 때문에 동기화 문제가 발생할 수 있고, 하나의 스레드에 문제가 발생하면 전체 스레드에 영향을 끼친다. 또한 단일 프로세스일 경우 효과를 기대하기 어렵다.

댓글