본문 바로가기
운영체제

[cs 스터디 - 운영체제 2주차]

by 근즈리얼 2024. 1. 15.
728x90

프로세스

<질문 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하다는 의미와 그렇게 설계하는 방법을 설명해 주세요.

답변

 

728x90

'운영체제' 카테고리의 다른 글

[cs 스터디 - 운영체제 4주차]  (1) 2024.02.05
[cs 스터디 - 운영체제 3주차]  (0) 2024.01.21
[CS스터디 - 운영체제 1주차]  (0) 2024.01.08

댓글