프로세스
<질문 1> 프로그램에 대해 설명해주세요.
답변
프로그램이란?
- 컴퓨터에서 실행되는 소프트웨어 응용 프로그램을 의미
- 명령어나 코드의 집합으로, 특정 작업을 수행하거나 원하는 결과를 얻기 위해 컴퓨터에 의해 실행
프로그램은 시스템 프로그램과 응용 프로그램으로 나눌 수 있음
- 시스템 프로그램
- 운영체제의 핵심 부분
- 하드웨어와 소프트웨어간의 상호 작용을 관리
- 다양한 하드웨어 자원을 효과적으로 관리
- ex) 커널, 디바이스 드라이버, 파일 시스템
- 응용 프로그램
- 사용자가 직접 사용하는 프로그램
- 특정 작업이나 기능을 수행하기 위해 설계
- ex) 워드, 웹 브라우저, 게임
<질문 2> 프로세스에 대해 설명해주세요.
답변
프로세스란?
- 실행중인 프로그램을 나타내는 개념
- 메모리에 적재되어 CPU에 의해 실행되고 있는 프로그램의 인스턴스
- 실행중인 프로그램의 상태를 나타내며, 여러 프로세스가 동시에 실행될 수 있음
주요 특징
- 독립성
- 각 프로세스는 독립적으로 실행
- 각 프로세스가 자체의 메모리 공간을 가지고 있고, 서로 간의 자원에 대한 충돌을 방지하기 위함
- 실행 상태
- 다양한 실행 상태를 가짐
- ex) 실행 중인 상태, 준비 상태, 대기상태 등
- 자원 할당
- 각 프로세스는 CPU 시간, 메모리 공간, 파일 등의 시스템 자원을 필요로 함
- 운영체제는 이러한 자원을 효율적으로 할당하기 위해 여러 프로세스가 동시에 실행될 수 있도록 함
- 동기화
- 프로세스 간의 상호 작용이나 데이터 공유를 위해 동기화 메커니즘 필요
<질문 3> 프로세스 문맥에 대해 설명해주세요.
답변
프로세스 문맥이란?
- 현재 실행 중인 프로세스의 상태 및 실행 환경에 대한 모든 정보를 나타냄
- 프로세스가 실행되는 동안 각종 레지스터, 메모리, 스택, 프로그램 카운터 등의 상태 정보를 포함
- 이 정보는 해당 프로세스의 실행을 일시 중단하고 나중에 재개할 수 있도록 필요한 것들을 모두 기록한 것
프로세스 문맥은 프로세스의 상태를 저장하고 나중에 다시 실행할 수 있도록 하는데 필수적
여러 프로세스를 동시에 혹은 순차적인 스케줄링 방식에서 효과적으로 프로세스 전환을 할 수 있도록 함
<질문 4> 문맥교환(context switch)에 대해 설명해주세요.
답변
문맥교환이란?
- 현재 실행 중인 프로세스 또는 쓰레드의 상태 정보(문맥)를 저장하고 다른 프로세스 또는 쓰레드의 상태 정보를 복원하여 실행을 전환하는 것
- 운영체제가 스케줄러를 관리하는데, 여러 프로세스나 쓰레드가 CPU를 공유하면서 실행되기 때문에 발생
문맥교환이 발생하는 상황
- 타이머 인터럽트
- 운영체제는 타이머를 사용하여 일정 주기마다 인터럽트를 발생시킴
- 이 인터럽트가 발생하면, 현재 실행 중인 프로세스의 상태를 저장하고 스케줄러에 의해 다음에 실행될 프로세스의 상태로 전환
- 입출력 요청
- 프로세스가 입출력 작업을 요청하면 해당 작업이 완료될 때까지 대기하면서 CPU를 반납하게 됨
- 이때도 현재 프로세스의 상태를 저장하고 입출력 작업이 완료된 후에 스케줄러에 의해 다른 프로세스가 실행되도록 함
- 다른 이벤트 발생
- 시그널이나 프로세스 간 통신을 통한 이벤트 발생 시에도 문맥 교환이 발생할 수 있음
문맥 교환 상세 과정
- 현재 프로세스의 문맥 저장 : 현재 실행 중인 프로세스의 레지스터 상태, 메모리 상태 등을 PCB나 TCB에 저장
- 스케줄러에 의한 프로세스 선택 : 스케줄러는 다음에 실행할 프로세스를 선택
- 선택된 프로세스의 문맥 복원 : 선택된 프로세스의 저장된 문맥 정보를 레지스터, 메모리 등에 복원
- 프로세스 실행 재개 : 선택된 프로세스의 실행을 재개
<질문 5> 프로세스의 메모리 공간에 대해 설명해주세요.
답변
프로세스의 메모리 공간이란?
- 프로그램이 실행되는 동안 필요한 데이터와 코드를 저장하기 위한 공간
- 각 프로세스는 독립된 메모리 공간을 가짐
주요 섹션
- 텍스트 영역 혹은 코드 영역
- 프로그램의 기계어 코드가 저장되는 곳
- 실행 중에 수정되지 않는 읽기 전용 메모리로 취급됨
- 데이터 섹션
- 초기화된 전역 변수와 정적 변수가 저장되는 공간
- 프로그램이 시작될 때 초기값이 할당되며, 실행 중에 값을 변경할 수 있음
- BSS 섹션(Block Started by Symbol)
- 초기화되지 않은 전역 변수와 정적 변수가 저장되는 곳
- 이 섹션의 변수들은 프로그램이 시작될 때 명시적인 초기화가 이루어지지 않았다면 0으로 초기화
- 힙
- 동적으로 할당되는 메모리가 저장되는 영역
- 프로그램 실행 중 동적으로 메모리를 할당하고 해제할 수 있음, 이때 사용되는 공간을 힙이라 함
- 힙은 프로그램이 직접 관리하거나 동적 메모리 할당 함수(malloc, free)를 통해 운영체제가 관리
- 스택
- 함수 호출과 관련된 지역 변수, 함수 매개변수, 복귀 주소 등이 저장되는 공간
- 스택은 후입선출 구조를 가지며, 함수가 호출될 때마다 스택 프레임이 생성되고 함수가 반환될 때 스택 프레임이 제거
- 스택을 통해 함수 호출의 재귀적인 구조를 관리할 수 있음
<질문 6> 프로세스 제어블록(PCB)에 대해 설명해주세요.
답변
PCB(프로세스 제어 블록)란?
- 운영체제가 각 프로세스를 관리하기 위해 유지하는 정보의 블록
- 운영체제 커널 내에 존재하며, 각 프로세스당 하나씩 대응
- 프로세스의 상태 및 제어 정보가 저장, 운영체제가 프로세스를 관리하고 제어할 수 있도록 도움
- 각 프로세스가 생성될 때 마다 고유의 PCB가 생성되고 프로세스가 완료되면 PCB는 제거됨
PCB가 유지하는 주요 정보
- 프로세스 상태 : 현재 프로세스의 상태를 나타내는 정보 -> 대기, 실행, 준비 등의 상태 존재
- 프로그램 카운터 : 다음에 실행할 명령어의 주소를 나타냄
- 레지스터 상태 : 프로세스의 레지스터 상태를 나타내며, 누적기, 명령어 레지스터 등이 여기에 포함
- 프로세스 식별자 : 각 프로세스는 고유한 식별자를 가짐 -> 운영체제가 해당 프로세스를 식별
- 우선순위 : 프로세스의 실행 우선순위를 나타내는 정보
- 스케줄링 정보 : 프로세스의 스케줄링에 필요한 정보들을 포함
- 메모리 관리 정보 : 프로세스가 사용하는 메모리 영역에 대한 정보를 유지
- 입출력 상태 : 프로세스의 입출력 작업에 대한 상태 정보를 포함
<질문 7> 멀티 프로세스에 대해서 설명해주세요.
답변
멀티 프로세스란?
- 하나의 컴퓨터 시스템에서 동시에 여러 개의 독립적인 프로세스가 실행되는 개념
- 각 프로세스는 독립적인 메모리 공간을 가지며, 서로 영향을 미지치 않고 동작
- 멀티 프로세스 환경에서는 각 프로세스가 자체의 코드와 데이터를 가지고, 프로세스 간의 통신이나 자원 공유를 위해서는 명시적인 매커니즘이 필요
특징 및 장점
- 독립성 : 각 프로세스는 독립적인 메모리 영역을 가지므로, 하나의 프로세스에서 문제가 발생해도 다른 프로세스에 영향을 주지 않음
- 안정성 : 하나의 프로세스가 비정상적으로 종료되더라도 시스템 전체에 영향을 미치지 않음
- 병렬성 : 여러 프로세스가 동시에 실행되므로, 시스템의 성능을 향상시킬 수 있음
- 편리한 자원 관리 : 각 프로세스는 독립된 자원을 할당받기 때문에, 자원의 효율적인 관리가 가능
단점
멀티프로세스 환경에서는 프로세스 간의 통신이나 자원 공유가 복잡하고 오버헤드가 크다는 단점이 있음
<질문 8> 프로세스 수행 상태 변화 과정에 대해 설명해주세요.
답변
- 생성 : 새로운 프로세스가 생성되고 초기화됨
- 준비 : 프로세스가 실행을 기다리는 상태로, CPU를 할당받기를 기다림
- 실행 : 준비 상태의 프로세스가 CPU를 할당받아 명령어를 실행하는 상태
- 대기 : 프로세스가 어떤 이벤트가 발생하기를 기다리는 상태
- 종료 : 프로세스가 실행을 완료하고 시스템에서 제거
- 생성 -> 준비 : 새로운 프로세스가 생성되면 준비 상태로 전이
- 준비 -> 실행 : 스케줄러에 의해 선택된 프로세스가 CPU를 할당받아 실행 상태로 전이
- 실행 -> 대기 : 프로세스가 입출력을 요청하거나 다른 이벤트를 기다리는 동안 대기 상태로 전이
- 대기 -> 준비 : 대기 중인 프로세스가 기다리던 이벤트가 발생하면서 다시 준비 상태로 전이
- 실행 -> 종료 : 프로세스가 실행을 완료하면 종료 상태로 전이, 시스템에서 제거
<질문 9> 프로세스끼리 협력하는 방법에 대해서 설명해주세요.
답변
- 프로세스 간 통신(Inter-Process Communication, IPC)
- 프로세스 간에 데이터를 주고 받는 메커니즘
- 일반적인 IPC 메커니즘으로는 파이프, 소켓, 메시지 큐, 공유 메모리, 세마포어 등이 있음
- 공유 메모리
- 두 개 이상의 프로세스가 메모리 공간을 공유하는 방법
- 한 프로세스에서 작성한 데이터를 다른 프로세스가 읽을 수 있음
- 프로세스 간에 빠른 데이터 전송이 가능함
- 메시지 패싱
- 프로세스들이 메시지를 주고받는 방식으로 통신
- 메시지 큐나 메시지 전송 함수 등을 통해 데이터를 교환
- 각각의 프로세스가 독립적인 메모리를 가지고 있기 때문에 안전하게 통신이 가능함
- 파이프
- 부모 프로세스와 자식 프로세스 사이에서 통신하는데 사용되는 방법
- 부모 프로세스에서 생성한 파이프로 데이터를 보내고, 자식 프로세스에서는 파이프로부터 데이터를 읽음
- 소켓
- 네트워크를 통해 프로세스 간에 통신하는 방법으로, 인터넷이나 로컬 네트워크에서 사용됨
- 세마포어
- 프로세스 간에 상호 배제 또는 동기화를 위한 기법 중 하나로, 공유 자원에 대한 접근을 제어
<질문 10> fork() 명령어에 대해 설명해주세요.
답변
- Unix 계열의 운영체제에서 사용되는 시스템 콜 중 하나
- 새로운 프로세스를 생성하는데 사용됨
- fork()가 호출되면 현재 실행 중인 프로세스가 완전히 복제되어 새로운 프로세스가 생성됨
- 부모 프로세스와 자식 프로세스가 동일한 프로그램 코드, 데이터, 힙, 스택 등을 가지게 됨
- 다만, 부모나 자식 중 하나의 프로세스에서라도 데이터, 힙, 스택의 수정이 발생하면 cow(copy on write)가 발생
- cow : 쓰기 작업 시 복사
쓰레드
<질문 1> 쓰레드에 대해 설명해주세요.
답변
쓰레드란?
- 프로세스 내에서 실행되는 가장 작은 단위의 흐름
- 하나의 프로세스는 여러 개의 쓰레드를 포함할 수 있음
- 각각의 쓰레드는 독립적인 경로를 가지며, 다른 쓰레드와는 메모리를 영역을 공유
- 스레드는 프로세스 내의 code, data, heap 영역을 다른 스레드와 공유하고 stack 영역은 따로 할당 받음
특징
- 경량 프로세스 : 쓰레드는 프로세스 내의 자원을 공유하므로 프로세스에 비해 생성 및 관리가 더 빠름
- 효율성 : 여러 작업을 동시에 처리할 수 있으므로, 프로그램의 응답성과 성능을 향상시킴
- 공유 자원 : 쓰레드는 같은 프로세스 내에서 실행되기 때문에, 프로세스 내의 자원을 공유할 수 있음 -> 데이터를 쉽게 전달하고 효율적으로 작업을 분배할 수 있음
- 동기화 : 여러 쓰레드가 공유 자원을 접근할 때, 동기화 필요 -> 데이터 일관성 유지, 예측 가능한 동작을 보장
- 병렬성 : 멀티쓰레딩을 통해 여러 작업을 병렬로 수행함으로써 성능을 향상시킬 수 있음
- 데드락 문제 주의 : 동시에 여러 쓰레드가 동작하면서 발생할 수 있는 문제들을 주의 깊게 다뤄야 함
<질문 2> 쓰레드의 메모리 공간에대해 설명해주세요.
답변
- 코드 영역
- 프로그램의 기계어 코드가 저장되는 영역
- 코드 실행중에는 수정되지 않으며 읽기 전용
- 데이터 영역
- 전역 변수 및 정적 변수가 메모리에 할당되는 영역
- 프로세스 내의 모든 쓰레드가 이 영역을 공유
- 힙 영역
- 동적으로 할당된 메모리가 저장되는 영역
- 여러 쓰레드가 힙을 공유하지만, 동시에 여러 쓰레드가 힙에 동시에 접근하는 것을 관리하기 위해 동기화 필요
- 스택 영역
- 각 쓰레드는 자신만의 스택을 가지고 있음
- 스택은 함수 호출 및 지역 변수의 메모리가 저장되는 영역으로, 각 쓰레드는 독립적으로 사용
<질문 3> 쓰레드 제어블록(TCB)에 대해 설명해주세요.
답변
쓰레드 제어블록이란?
- 운영체제가 각 쓰레드를 관리하기 위해 유지하는 정보를 담고 있는 데이터 구조
- 각 쓰레드마다 하나의 TCB가 존재하며, 이 블록은 해당 쓰레드의 상태와 제어 정보를 저장
TCB가 유지하는 주요 정보
- 쓰레드 식별자 : 각 쓰레드는 고유한 식별자를 갖음
- 쓰레드 상태 : 현재 쓰레드의 상태를 나타냄 ex) 실행 중, 준비 중, 대기 중
- 프로그램 카운터 : 다음에 실행할 명령어의 주소
- 쓰레드 레지스터 : 쓰레드가 사용하는 레지스터 상태를 저장
- 스케줄링 정보 : 쓰레드의 우선순위와 같은 스케줄링에 필요한 정보
- 쓰레드 우선순위 : 쓰레드의 우선순우와 같은 스케줄링에 필요한 정보
- 쓰레드의 스택 포인터 : 쓰레드의 스택의 상태를 관리하기 위한 포인터
- 쓰레드의 동기화 및 상태 관리 정보 : 쓰레드 간의 동기화와 상태 관리에 필요한 정보를 포함
<질문 4> 사용자 수준 쓰레드와 커널 수준 쓰레드의 차이를 설명해 보세요.
답변
<질문 5> 멀티 쓰레딩 프로그래밍 대해서 설명해주세요.
답변
멀티 쓰레딩 프로그래밍이란?
- 하나의 프로세스 내에서 여러 쓰레드를 동시에 실행하여 작업을 처리하는 프로그래밍 모델
- 쓰레드는 경량 프로세스로, 각 쓰레드는 독립적으로 실행되면서 프로세스 내의 자원을 공유
- 멀티 쓰레딩을 사용하면 프로그램의 병렬성을 증가시켜 성능 향상을 이끌어내고, 동시에 여러 작업을 수행할 수 있음
<질문 6> 멀티 쓰레드 프로그래밍의 장단점을 설명해 주세요.
답변
장점
- 성능 향상 : 여러 쓰레드가 병렬로 작업을 수행하므로, 전체적인 성능이 향상될 수있음
- 응답성 향상 : 여러 작업을 동시에 처리함으로써 응용 프로그램의 반응성이 향상될 수 있음
- 자원 공유 : 쓰레드는 같은 프로세스 내에서 실행되므로, 자원 공유가 용이
단점
- 경쟁 조건 : 여러 쓰레드가 공유 자원을 동시에 접근할 때, 그 결과에 예측할 수 없는 상태가 되는 문제
- 교착 상태 : 두 쓰레드 이상이 서로의 작업이 끝나기를 기다리면서 무한히 대기하는 상태
- 병목현상 : 쓰레드 간의 동기화로 인해 전체 성능이 개선되지 않을 수 있음
<질문 7> 멀티 프로세스대신 멀티 쓰레드를 사용하는 이유가 뭔가요?
답변
- 메모리 측면 : 자원을 효율적으로 사용하기 위해
- 멀티 프로세스의 경우 프로세스를 생성하여 자원을 할당하는 시스템 콜을 할 때마다 오버헤드가 크지만, 멀티 쓰레드는 메모리 영역을 공유하기 때문에 시스템 자원을 효율적으로 사용할 수 있음
- 속도 측면 : Context-Switching 비용을 줄이고 응답 속도를 빠르게 하기 위해
- 메모리 영역을 공유하기 때문에 Context-Switching과 쓰레드 간의 통신 시 Stack 영역만 처리하기에 통신 비용이 적고 응답 속도가 빠름
<질문 8> 멀티 쓰레드 프로그래밍에서 주의할 점이 있을까요?
답변
<질문 9> Thread-Safe하다는 의미와 그렇게 설계하는 방법을 설명해 주세요.
답변
'운영체제' 카테고리의 다른 글
[cs 스터디 - 운영체제 4주차] (1) | 2024.02.05 |
---|---|
[cs 스터디 - 운영체제 3주차] (0) | 2024.01.21 |
[CS스터디 - 운영체제 1주차] (0) | 2024.01.08 |
댓글