프로세스
프로그램을 메모리 상에서 실행 중인 작업
기본적으로 프로세스 마다 최소 1개의 스레드를 소유하고 있다. (메인 스레드 +@)
- Heap : 동적 할당 시 사용 (new, malloc)
프로세스의 주소 공간
프로그램이 CPU에 의해 실행 되고 → 프로세스가 생성된 후 → 메모리에 프로세스 주소 공간이 할당됨
- 프로세스 주소 공간은 코드, 데이터, 스택으로 이루어져 있다.
- 코드 Code : 프로그램 소스 코드 저장, 코드 자체를 구성하는 메모리 영역
- 같은 프로그램 자체에서는 모두 같은 내용이므로 따로 관리하여 공유
- 데이터 Data : 전역 변수, 정적변수, 배열 저장
- 초기화된 데이터는 data 영역에 저장
- 초기화되지 않은 데이터는 bss 영역에 저장
- 스택 Stack : 지역변수, 매개변수, 리턴값 (임시 메모리 영역) 저장
- 코드 Code : 프로그램 소스 코드 저장, 코드 자체를 구성하는 메모리 영역
- 최대한 데이터를 공유해야 메모리 사용량을 줄일 수 있기에 구역을 나눈 것이다.
- Stack과 Data는 스택 구조의 특성과 전역 변수의 활용성을 위한 것이다.
스레드
프로세스 안에서 실행되는 여러 흐름 단위
- 스레드는 Stack만 따로 할당 받고 나머지 영역은 공유
- 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용한다.
멀티 프로세스
하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
- 메모리 침범 문제를 OS 차원에서 해결하여 안전하지만 각각 독립된 메모리 영역을 가지고 있어 작업량이 많을수록 오버헤드가 발생한다.
- Context Switching으로 인한 성능 저하
- 프로세스 상태 정보를 저장하고 복원하는 일련의 과정
- 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정
멀티 스레드
하나의 응용 프로그램에서 여러 스레드를 구성하여 각 스레드가 하나의 작업을 처리하는 것
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하게 해준다.
- 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소, 전역 변수와 정적 변수에 대한 자료 공유 가능
- 하나의 스레드의 공유 메모리 데이터 공간이 망가지면 모든 스레드가 작동 불능이 되므로 안전성이 문제가 된다.
- 멀티 스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비
- 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려고할 때 발생하는 문제를 해결하기 위한 동기화 과정
- 상호 배제, 진행, 한정된 대기를 충족해야 한다.
인터럽트 (Interrupt)
프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것
혹은 지금 수행 중인 일보다 더 중요한 일(입출력, 우선 순위 연산 등)이 발생하면 그 일부터 먼저 처리하고 하던 일을 계속 진행한다.
- 외부 인터럽트
- CPU의 하드웨어 신호에 의해 발생
- 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
- 전원 이상, 기계 착오, 외부 신호, 입출력 등
- 내부 인터럽트 (Trap)
- CPU의 하드웨어 신호에 의해 발생
- 잘못된 명령이나 데이터를 사용할 때 발생
- 0으로 나누거나, 오버플로우, 명령어를 잘못 사용, Exception
- 소프트웨어 인터럽트
- 명령어의 수행에 의해 발생(SVC인터럽트)
- 사용자가 프로그램을 실행시킬 때 발생
- 소프트웨어 이용 중에 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 동작이 수행된다.
인터럽트 발생의 처리법
1. 주 프로그램이 실행되다가 인터럽트 발생
2. 현재 수행 중인 프로그램을 멈추고 상태 레지스터와 PC 등을 스택에 잠시 저장한 뒤 인터럽트 서비스 루틴으로 이동
- 인터럽트 기능이 없다면 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해야한다 → 폴링Polling
- 폴링하는 시간에 원래 하던 일에 집중할 수 없게 되어 많은 기능을 제대로 수행하지 못하는 단점이 존재
3. 컨트롤러가 입력을 받아들이는 방법(우선 순위 판별법)에 따라 인터럽트 처리
1) 폴링 방식
사용자가 명령어를 사용하여 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행 (하드웨어에 비해 느림)
2) 인터럽트 방식
MCU 자체가 하드웨어적으로 변화를 체크하여 변화시에만 일정한 동작을 하는 방식
Daisy Chain, 병렬 우선순위 부여
발생 시기를 예측 불가한 경우에 가장 빠르게 대응 가능
인터럽트 방식은 하드웨어로 지원을 받아야 하는 제약이 있지만 폴링에 비해 신속하게 대응이 가능하다. (실시간 대응이 필요할 때)
'기초 CS 정리' 카테고리의 다른 글
Process Control Block(PCB)와 Context Switching (0) | 2023.01.29 |
---|---|
System Call 시스템 콜 (0) | 2023.01.29 |
운영체제 (0) | 2023.01.27 |
폰 노이만 구조 (0) | 2023.01.27 |
패리티 비트 / 해밍 코드 (0) | 2023.01.27 |