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 시스템에서는 여러 개의 스레드를 실제로 병렬 실행 가능