CS/운영체제

운영체제의 소개 & 프로세스와 쓰레드

haong_ 2025. 2. 27. 22:02

운영체제 수업의 1강 2강 정리한 내용

운영체제란 무엇인가?

대표적인 시스템 소프트웨어로 컴퓨터 시스템의 자원을 관리하고 프로그램이 동작하기 위한 서비스를 제공

운영체제의 역할

  • 컴퓨터 시스템의 자원(하드웨어, 소프트웨어, 데이터) 관리
  • 사용자가 내린 명령을 해석해 실행하게하는 사용자 지원 

커널 모드와 사용자모드

커널모드(슈퍼바이저 모드)

  • Kernel : 커널모드에서 동작하는 운영체제의 핵심요소
  • 하드웨어를 직접 제어할 수 있는 CPU 명령어를 사용할 수 있는 모드 
  • 운영체제의 커널이 동작함 
  • 일체형 커널 : 운영체제의 모든 서비스가 커널 내에 포함 (ex. UNIX, Linux)
    • 커널 내부 요소들이 서로 효율적으로 상호작용
    • 한 요소라도 오류 발생하면 시스템 전체에 장애 발생 가능 
  • 마이크로 커널 : 운영제체 요소의 대부분을 커널 외부로 분리. 메모리관리, 멀티태스킹, 프로세스간 통신(IPC) 등 최소한의 요소만 커널내에 남김
    • 새로운 서비스를 추가해 운영체제 확장이 쉽고, 유지보수가 용이
    • 커널 외부 요소들 사이는 IPC 필요해 성능저하 발생 

사용자 모드(보호모드)

  • 응용 프로그램이 동작함

시스템 호출(시스템 콜) 

  • 응용 프로그램이 하드웨어에 대한 제어가 필요한 경우 운영체제에 서비스를 요청하는 메커니즘
  • 사용자 모드 > 시스템 콜 > 커널 모드로 변경해 하드웨어 제어 > 다시 사용자 모드로 

운영체제의 구성

프로세스 관리자 

  • 프로세스 생성 및 삭제
  • CPU 할당을 위한 스케줄 결정
  • 프로세스의 상태를 관리하며 상태 전이 처리 

메모리 관리자

  • 메모리 공간 할당 및 회수 
  • 메모리 공간 보호 

장치 관리자 

  • 컴퓨터 시스템의 모든 장치 관리
  • 시스템 장치의 할당, 작동, 반환 

파일 관리자

  • 컴퓨터 시스템의 모든 파일 관리 
  • 저장장치 공간 관리
  • 파일의 접근 제한 관리

운영체제의 유형

  • 일괄처리 
    • 배치 프로세싱 작업을 모아서 순서대로 처리
    • 나중에 들어온 작업은 앞선 작업이 모두 끝날때까지 대기
  • 시분할(Time-sharing)
    • 각 사용자의 프로그램을 시간으로 나눠 조금씩 수행하는 방식
    • 대화형 운영체제라고도 하며 응답시간이 일괄처리보다 단축
  • 실시간
    • 원하는 시간내에 프로그램의 결과를 얻을 수 있는 방식 
    • 처리결과가 현재 결정에 영향을 주는 환경에서 사용(미사일 제어, 증권거리 관리) 
  • 분산
    • 2개 이상 컴퓨터 시스템이 네트워크로 연결되서 서로의 자원을 이용하는 시스템 

프로세스와 스레드 

프로세스 : 실행중인 프로그램 

  • 운영체제로부터 자원을 할당 받아 동작 

운영체제가 처리하는 작업

  • 프로세스 생성 및 종료 
  • 프로세스 실행시키기 위한 스케줄링 작업
  • 프로세스 상태 관리

프로세스의 구성

  • 메모리 구조
    • 프로그램 실행에 직접적으로 필요한 코드와 데이터 
  • 프로세스 제어 블록(PCB)
    • 운영체제가 프로세스를 관리하기 위해 필요한 정보, 각 프로세스마다 존재
    • 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
프로세스 ID (PID)  프로세스를 식별하는 고유한 번호
프로세스 상태 실행 중, 준비 상태, 대기 상태 등 현재 상태 정보
프로그램 카운터 (PC) 다음 실행할 명령어의 주소 저장
CPU 레지스터 연산 수행을 위한 레지스터 값 저장
메모리 관리 정보 프로세스의 주소 공간, 페이지 테이블 등 관리 정보
CPU 스케줄링 정보 우선순위, 스케줄링 큐 포인터 등의 정보
입출력 상태 정보 열린 파일 목록, 입출력 장치 사용 정보

프로세스 상태 관리 

  • 생성 - 프로세스가 생성되어 PCB가 할당되는 단계
  • 준비 - 실행을 기다리는 상태 (CPU 할당 대기)
  • 대기 - 입출력 등 특정 이벤트 발생을 기다리는 상태
  • 실행- CPU를 할당받아 명령어를 실행 중인 상태
  • 종료 - 실행이 완료되거나 강제 종료된 상태 (PCB 제거)

프로세스 상태 변화 

  • 준비 → 실행: CPU가 할당되어 실행 상태로 전환(디스패칭)
  • 실행 → 대기: 입출력 요청 등으로 인해 CPU를 반환하고 대기 상태로 전환
  • 대기 → 준비: 요청한 작업(예: 입출력)이 완료되면 다시 실행 준비 상태로 이동
  • 실행 → 준비: CPU 스케줄러가 프로세스를 다른 프로세스로 교체 (선점형 스케줄링)

부모 프로세스와 자식 프로세스

  • 한 프로세스가 다른 프로세스를 생성 
  • 부모 프로세스: 시스템 호출을 하는 프로세스 
  • 자식 프로세스 : 시스템 호출로 생성된 프로세스 

프로세스 생성 시스템 호출(UNIX, Linux)

  • fork() : 자식 프로세스는 부모 프로세스의 메모리 공간 그대로 복사 (PID 변경)
  • exec() :실행 중인 프로세스가 새로운 프로그램을 로드하여 실행 (PID 유지 메모리 공간 변경)
  • exec()는 단독으로 사용되지 않고, 보통 fork()와 함께 사용됨
    • fork()로 자식 프로세스를 만든 후, 자식 프로세스가 exec()를 호출하여 새로운 프로그램 실행

쓰레드 (Thread)

  • 프로세스 내에서 다중처리를 위해 제안된 개념. 프로세스 안에서 스레드는 하나 이상 존재 
  • 하나의 프로그램을 실행하기 위한 기본적인 단위로 디스패칭의 단위 

스레드의 구성

스레드는 실행에 필요한 최소한의 정보만 가지고 있음

스레드 ID 프로세스를 식별하는 고유한 번호
프로그램 카운터  현재 실행 중인 명령어의 주소
레지스터 연산을 수행하기 위한 CPU 레지스터 값
스택 함수 호출, 지역 변수, 리턴 주소 저장. 스레드는 각자 독립적인 스택을 가짐
스레드 상태 실행, 준비, 대기, 종료 등의 상태 정보
우선순위 스케줄링을 위한 스레드 실행 우선순위
스레드별 지역 저장소 스레드마다 개별적으로 관리되는 데이터 저장 영역

공유되는 값 (프로세스와 공유됨)

  • 코드(Code) 영역: 실행할 프로그램 코드
  • 데이터(Data) 영역: 전역 변수, 정적 변수
  • 힙(Heap) 영역: 동적 할당된 메모리

스레드는 독립적인 스택과 레지스터를 가지지만, 코드/데이터/힙은 같은 프로세스 내에서 공유

다중 스레드

  • 하나의 프로세스 내에서 여러 개의 스레드를 생성하여 병렬 처리하는 기술
  • 스레드들은 코드, 데이터, 힙 메모리를 공유하면서 각자의 스택과 레지스터를 가짐
  • 빠른 문맥 전환(Context Switch) 을 통해 효율적인 CPU 사용 가능
  • 단일 코어(Single Core) 시스템에서는 다중 스레드가 실행되더라도 동시에 한 개의 스레드만 실행 가능 (문맥 전환 필요)
  • 멀티코어(Multi-Core) 또는 멀티 CPU 시스템에서는 여러 개의 스레드를 실제로 병렬 실행 가능