※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.
오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
개념 정리
: 프로그램은 저장 장치에 저장되어 있는, 실행 가능한 코드의 정적인 집합입니다. 프로그램은 디스크와 같은 비휘발성 메모리에 저장되며, 사용자가 요청할 때까지 실행되지 않습니다. 프로그램은 소프트웨어 개발자에 의해 작성되고, 컴퓨터에서 실행될 수 있는 명령어들과 데이터를 포함
프로세스(Process)
: 컴퓨터 내에서 실행 중인 프로그램의 요소
프로세스는 1. 프로세스명과 프로세스 아이디(PID)로 나타낸다.
프로세스는 프로그램 카운터, 스택, 데이터 섹션 등 실행에 필요한 다양한 정보를 포함하며, 운영체제가 관리한다.
프로세스가 실행 중 자신에게 종속적인 프로세스를 둘수 있다. 원래 프로세스를 부모 프로세스(parent),
종속적인 프로세스를 자신 프로세스(child)라고 한다.
쓰레드(Thread)
: 프로세스(process) 내에서 실제로 작업을 수행하는 실행 흐름
모든 프로세스에는 동시에 실행되는 여러개의 흐름(스레드)가 존재하여 작업을 수행합니다.
스레드는 이러한 프로세스 내에서 독립적인 실행 경로를 형성하며, 각각 별도의 프로그램 카운터, 레지스터 세트 및 스택을 가진다. 하지만 같은 프로세스내의 스레드들은 "코드, 데이터, 힙, 열린파일, 프로세스 상태"와 같은 자원을 공유합니다.
두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.
스케쥴링(Scheduling)
다중 프로그래밍을 가능하게 하는 운영 체제의 동작 기법. 멀티태스킹 환경에서 CPU 자원을 공정하고 효율적으로 사용할 수 있도록 관리하는 과정이다. 시스템의 성능을 최적화하여 이를 통해 실행 순서를 결정하고 CPU 시간을 할당한다.
스케줄링은 "스케줄러"라는 소프트웨어가 해당 기법을 컨트롤 한다.
프로세스 스케줄링 알고리즘
얼마나 자주 스케줄링이 동작하는지에 따라
- 장기 스케줄러(작업 스케줄러)
- 중기 스케줄러(스와핑)
- 단기 스케줄러(디스패치)
다른 프로세스가 작업 중일 때 CPU 점유 가능 여부에 따라
- 비선점형 스케줄링 : 하나의 프로세스가 CPU를 할당 받으면, 작업 종료 후 CPU 반환 시까지 다른 프로세스가 CPU를 점유할 수 없는 스케줄링 방식
- 선점형 스케줄링 : 하나의 프로세스(쓰레드)가 CPU를 차지하고 있을 때, 우선 순위가 높은 다른 프로세스 (쓰레드)가 현재 프로세스 (쓰레드)를 중단시키고 CPU를 점유하는 방식
쓰레드 스케줄링 알고리즘
- 라운드 로빈 알고리즘
- 우선순위 기반 알고리즘
- 최소남은시간 우선 알고리즘
동기화
프로세스 또는 쓰레드의 실행순서를 제어하고 동시에 접근할 수 없는 자원에 하나의 프로세스 또는 쓰레드만 접근 가능하도록 하여 데이터의 일관성을 유지하는 것.
동기화 필요한 대표적인 경우
- 동일한 메모리 영역으로의 동시접근이 발생
- 동일한 메모리 영역에 접근하는 쓰레드의 실행 순서를 지정
임계 구역(Critical Section)
서로 다른 두 프로세스, 혹은 스레드 등의 처리 단위가 같이 접근해서는 안 되는 공유 영역을 뜻한다.
보호되지 않는 임계 구역에 두 처리 단위가 동시에 접근할 때 발생하는 문제를 '임계 구역 문제'라고 한다
동기화 문제
- Race Condition(경쟁 조건) : 멀티 프로세스 또는 멀티 스레드 환경에서 두 개 이상의 프로세스 또는 쓰레드가 공유 자원에 동시에 접근하여고 할 때 , 프로세스 또는 쓰레드들 사이의 실행순서에 따라 공유 자원의 최종상태가 달라질수 다. 이는 예측 불가능한 결과나 시스템의 오류를 가져올 수 있다.
- Critical Condition(임계 영역) : 경쟁조건을 발생시키는 코드 영역
- Starvation(기아상태) : 특정 프로세스 또는 쓰레드들에게 우선 순위가 부여될 때, 우선순위가 낮아서 원하는 자원을 영원히 할당 받지 못하는 상태
- Deadlock(교착상태) : 멀티 프로세스 또는 멀티 스레드 환경에서 대기중인 두개 이상의 프로세스 또는 쓰레드가 서로의 작업이 완료 되기를 기다리는 상태
- Livelock(라이브락) : 쓰레드들이 동시에 실행 되면서 락의 해제와 획득을 반복적으로 실행하지만, 아무 자원도 획득 하지 못하고 무한 동작중인 상태
- Spinlock(스핀 락) : 임계 구역(critical section)에 진입이 불가능할 때 진입이 가능할 때까지 루프를 돌면서 재시도하는 는 상태
'리눅스 > 일반 운영체제론' 카테고리의 다른 글
동기화[2] - 뮤텍스 / 세마포어 / 스핀락 (0) | 2024.08.13 |
---|