Step-by-Step
[CS] 운영체제 본문
운영체제
- 하드웨어를 효율적으로 사용할 수 있게 관리하는 소프트웨어
- 컴퓨터 사용자와 하드웨어 간 인터페이스로 동작하는 시스템 소프트웨어
- 컴퓨터 시스템의 자원들을 효율적으로 관리하여, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임
프로그램
- 컴퓨터에서 어떤 작업을 실행할 수 있는 정적의 상태 파일 (exe 파일)
- 하드디스크 등에 저장되어 있는 실행 코드
- 보조기억장치에 존재하며 실행되기를 기다리는 명령어와 정적인 데이터 묶음
- 사용자가 원하는 일을 처리할 수 있도록 올바른 수행 절차를 표현해 놓은 명령어들의 집합
프로세스
- 실행중인 프로그램
- 운영체제로부터 실행에 필요한 자원을 할당받은 것
- 일반적으로 작업(Job) 또는 태스크(Task)라고 함
메모리 구조

- CODE 영역 : 컴파일 된 소스코드가 저장되는 영역 / 프로그램 실행 코드가 저장되는 영역
- DATA 영역 : 전역 변수 / 정적 변수 / 초기화된 데이터가 저장되는 영역
- HEAP 영역 : 동저긍로 생성되는 데이터가 저장되는 영역
- STACK 영역 : 임시 데이터(함수, 지역변수 등)가 저장되는 영역
스택 프레임
- 함수를 실행하면 함수 결과로, 리턴될 주소가 스택에 저장되고 함수의 지역 변수들이 차례로 스택에 쌓이게 됨
- 함수가 다 실행되고 나면 스택에 있던 데이터들이 차례대로 삭제되고, 스택에 저장되어 있던 리턴될 주소도 지워지면서 해당 주소로 이동한다.
- 스택을 이용하여 만든, 함수를 실행하기 위한 구조를 "스택 프레임"이라고 한다.
프로세스 구조

- 각 프로세스는 독립된 영역 (Code Data Heap Stack)을 할당 받음
- Code 영역
- 실행 명령을 포함하는 코드들이 들어가는 부분
- 프로그램 시작할 때 컴파일한 프로그램(기계어)가 저장되어 있음
- 읽기 전용 영역으로, 프로세스가 함부로 변경할 수 없고 변경 시 오류를 발생시킴
- Data 영역
- 프로그램이 실행될 때 프로그램이 종료되면 시스템에 반환됨
- 전역변수, 정적변수, 배열, 구조체 등이 저장됨
- Data 영역은 다시 Data(GVAR) 영역과 BSS 영역으로 난무
- 초기화된 데이터는 Data(GVAR) 영역에 저장되고, 초기화하지 않은 데이터는 BSS 영역에 저장
- Heap 영역
- 메모리를 동적으로 할당할 때 사용되는 메모리 영역
- Stack 영역
- 프로그램이 자동으로 사용하는 메모리 영역
- 함수 호출과 관계되는 지역변수와 매개변수가 저장됨
- 함수 호출시 생성되고 함수가 끝나면 반환됨
스레드
Thread는 어떤 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위

- 프로세스 내에서 각 Stack만 따로 할당받고, Code Data Heap 영역은 공유함
- 스레드는 프로세스 내 주소 공간이나 자원들(Heap 공간 등)을 같은 프로세스 내 스레드끼리 공유하며 실행
- 같은 프로세스 내 여러 스레드들은 같은 Heap 공간을 공유
- 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없음
멀티 프로세스 vs 멀티 스레드

멀티 프로세스 | 멀티 스레드 | |
구조 | 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 구조 | 하나의 프로그램을 여러 개의 스레드로 구성하는 방식 |
장점 | 여러 개의 자식 프로세스 중 하나에 문제가 발생해도 다른 프로세스들이 있기 때문에 영향이 확산되지 않음 | 1. 멀티 스레드는 Stack을 제외한 자원들을 공유하기 때문에 Context Switching 시에 캐시 메모리를 비울 필요가 없고, 리소스를 아낄 수 있음 2. Stack 이외에 메모리를 공유하기 때문에 통신의 부담이 적음 |
단점 | 1. Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드가 발생함 2. 프로세스는 각 독립된 메모리 영역을 가지고 있기 때문에 프로세스 사이에서 공유하는 메모리는 없음 3. Context Switching이 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 함 독립된 영역 때문에 프로세스 간 통신이 필요함 |
1. 내부의 메모리를 공유하고 있어서 한 프로세스의 스레드가 문제가 발생하면 해당 프로세스 안의 다른 스레드에도 문제가 발생 2. 같은 데이터를 공유하기에 동기화에 신경써야 함 |
Context Switching
- 하나의 프로세스가 CPU를 사용중인 상태에서 인터럽트로 인해 다른 프로세스의 CPU 사용을 위해, 이전 프로세스 상태를 PCB에 보관하고 새로운 프로세스 상태를 적재하는 작업
- 한 프로세스의 문맥(상태)는 프로세스 제어블록(PCB)에 기록되어 있음
'CS공부 > 기본기술' 카테고리의 다른 글
[CS] 메모리 (1) | 2023.11.13 |
---|---|
[CS] 데이터베이스 (1) | 2023.11.04 |
[CS] 객체지향 프로그래밍 (0) | 2023.11.04 |
Comments