TIL
🌱 난 오늘 무엇을 공부했을까?
📌 프로세스
📍 Process란?
- 프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있습니다.
- 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말합니다.
- 프로그램이 메모리에 로드되어 프로세스가 되면 스택, 힙, 텍스트 및 데이터의 네 부분으로 나눌 수 있습니다. 다음 이미지는 메인 메모리 내부 프로세스의 단순화된 레이아웃을 보여줍니다
Stack
프로세스 스택에는 메서드/함수 매개변수, 반환 주소 및 지역 변수와 같은 임시 데이터가 포함됩니다.
Heap
런타임 동안 프로세스에 동적으로 할당된 메모리입니다.
Text
여기에는 Program Counter 값과 프로세서 레지스터의 내용이 나타내는 현재 활동이 포함됩니다.
Data
이 섹션에는 전역 및 정적 변수가 포함되어 있습니다.
📍 Process Life Cycle
Start
프로세스가 처음 시작/생성될 때의 초기 상태.
Ready
프로세스가 프로세서에 할당되기를 기다리는 상태. 프로세스는 시작 상태 이후 또는 실행 중에 이 상태가 될 수 있지만 스케줄러에 의해 인터럽트되어 CPU를 다른 프로세스에 할당할 수 있습니다.
Running
OS 스케줄러에 의해 프로세스가 프로세서에 할당되면 프로세스 상태는 실행 중으로 설정되고 프로세서는 명령을 실행합니다.
Waiting
프로세스는 사용자 입력을 기다리거나 파일을 사용할 수 있을 때까지 기다리는 것과 같이 리소스를 기다려야 하는 경우 대기 상태로 이동합니다.
Terminated or Exit
프로세스가 실행을 완료하거나 운영 체제에 의해 종료되면 종료된 상태로 이동하여 주 메모리에서 제거되기를 기다립니다.
📍 Process Control Block (PCB)
- 프로세스 제어 블록은 모든 프로세스에 대해 운영 체제에서 유지 관리하는 데이터 구조입니다.
- PCB는 프로세스 수명 내내 유지되며 프로세스가 종료되면 삭제됩니다.
📍 Process Scheduling
- 프로세스 스케줄링은 CPU에서 실행 중인 프로세스를 제거하고 특정 전략을 기반으로 다른 프로세스를 선택하는 프로세스 관리자의 활동입니다.
프로세스 스케줄링은 다중 프로그래밍 운영 체제의 필수적인 부분입니다.
- 이러한 운영 체제는 한 번에 둘 이상의 프로세스를 실행 가능한 메모리에 로드할 수 있으며 로드된 프로세스는 시간 다중화를 사용하여 CPU를 공유합니다.
🔗 Non-preemptive(동기 처리?)
- 여기서 프로세스가 실행을 완료할 때까지 프로세스에서 리소스를 가져올 수 없습니다.
- 리소스 전환은 실행 중인 프로세스가 종료되고 대기 상태로 이동할 때 발생합니다.
🔗 Preemptive(비동기 처리?)
- 여기서 OS는 고정된 시간 동안 프로세스에 리소스를 할당합니다.
- 자원 할당 동안 프로세스는 실행 상태에서 준비 상태로 또는 대기 상태에서 준비 상태로 전환됩니다.
- 이 전환은 CPU가 다른 프로세스에 우선 순위를 부여하고 우선 순위가 더 높은 프로세스를 실행 중인 프로세스로 대체할 수 있기 때문에 발생합니다.
🔗 Schedulers
- 스케줄러는 다양한 방식으로 프로세스 스케줄링을 처리하는 특수 시스템 소프트웨어입니다.
- 그들의 주요 임무는 시스템에 제출할 작업을 선택하고 실행할 프로세스를 결정하는 것입니다.
- 스케줄러에는 세 가지 유형이 있습니다.
- Long-Term Scheduler
- Short-Term Scheduler
- Medium-Term Scheduler
- 자세한 내용
🔗 Context Switching
- 컨텍스트 스위칭은 프로세스 제어 블록에 CPU의 상태 또는 컨텍스트를 저장하고 복원하여 나중에 같은 지점에서 프로세스 실행을 재개할 수 있도록 하는 메커니즘입니다.
- 이 기술을 사용하면 컨텍스트 스위처를 통해
여러 프로세스가 단일 CPU를 공유할 수 있습니다.
컨텍스트 스위칭은 멀티태스킹 운영 체제 기능의 필수적인 부분
입니다.
- 스케줄러가 CPU를 한 프로세스 실행에서 다른 프로세스 실행으로 전환하면 현재 실행 중인 프로세스의 상태가 프로세스 제어 블록에 저장됩니다.
- 그 후, 다음에 실행할 프로세스의 상태는 자체 PCB에서 로드되어 PC, 레지스터 등을 설정하는 데 사용됩니다. 이 시점에서 두 번째 프로세스가 실행을 시작할 수 있습니다.
- 프로세스가 전환되면 다음 정보가 나중에 사용하기 위해 저장하는 정보 목록
- Program Counter
- Scheduling information
- Base and limit register value
- Currently used register
- Changed State
- I/O State information
- Accounting information
🔗 Scheduling algorithms
🤔 non-preemptive, preemptive algorithm
- First Come First Serve (FCFS)
- Shortest Job Next (SJN)
🤔 non-preemptive algorithm
- Priority Based Scheduling
- 각 프로세스에는 우선 순위가 지정됩니다. 우선 순위가 가장 높은 프로세스가 먼저 실행되는 식입니다.
- 우선 순위는 메모리 요구 사항, 시간 요구 사항 또는 기타 리소스 요구 사항에 따라 결정할 수 있습니다.
🤔 preemptive algorithm
- Shortest Remaining Time
- 최단 잔여 시간(SRT)은 SJN 알고리즘의 선점 버전입니다.
- 프로세서는 완료에 가장 가까운 작업에 할당되지만 완료 시간이 더 짧은 새로운 준비 작업에 의해 선점될 수 있습니다.
- Round Robin Scheduling
- 각 프로세스에는 실행할 고정 시간이 제공되며 이를 퀀텀이라고 합니다.
- 주어진 시간 동안 프로세스가 실행되면 해당 프로세스가 선점되고 지정된 시간 동안 다른 프로세스가 실행됩니다.
🤔 Multiple-Level Queues Scheduling
- 다중 레벨 큐는 독립적인 스케줄링 알고리즘이 아닙니다.
- 다른 기존 알고리즘을 사용하여 공통 특성을 가진 작업을 그룹화하고 예약합니다.
📍 Thread란?
- 스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다.
- 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.
- 스레드는 경량 프로세스라고도 합니다.
- 스레드는 병렬 처리를 통해 애플리케이션 성능을 향상시키는 방법을 제공합니다. 스레드는 오버헤드 스레드를 줄임으로써 운영 체제의 성능을 향상시키는 소프트웨어 접근 방식을 나타냅니다.
- 다음 그림은 단일 스레드 및 다중 스레드 프로세스의 작동을 보여줍니다.
📍 Difference between Process and Thread
Process | Thread |
---|
프로세스가 무겁거나 리소스를 많이 사용합니다. | 스레드는 프로세스보다 리소스를 덜 사용하는 경량입니다. |
프로세스 전환은 운영 체제와의 상호 작용이 필요합니다. | 스레드 전환은 운영 체제와 상호 작용할 필요가 없습니다. |
다중 처리 환경에서 각 프로세스는 동일한 코드를 실행하지만 고유한 메모리와 파일 리소스가 있습니다. | 모든 스레드는 동일한 열린 파일 집합, 자식 프로세스를 공유할 수 있습니다. |
한 프로세스가 차단되면 첫 번째 프로세스가 차단 해제될 때까지 다른 프로세스를 실행할 수 없습니다. | 한 스레드가 차단되어 대기하는 동안 동일한 작업의 두 번째 스레드가 실행될 수 있습니다. |
스레드를 사용하지 않는 여러 프로세스는 더 많은 리소스를 사용합니다. | 다중 스레드 프로세스는 더 적은 리소스를 사용합니다. |
여러 프로세스에서 각 프로세스는 다른 프로세스와 독립적으로 작동합니다. | 한 스레드는 다른 스레드의 데이터를 읽거나 쓰거나 변경할 수 있습니다. |
📍 Advantages of Thread
- 스레드는 컨텍스트 전환 시간을 최소화합니다.
- 스레드를 사용하면 프로세스 내에서 동시성이 제공됩니다.
- 효율적인 커뮤니케이션.
- 스레드를 만들고 컨텍스트를 전환하는 것이 더 경제적입니다.
- 스레드를 사용하면 다중 프로세서 아키텍처를 더 큰 규모와 효율성으로 활용할 수 있습니다.
참고