일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 갤럭시 S24
- 시그널 핸들러
- 인터럽트
- 김영한
- vite
- SDK
- 온디바이스AI
- 프로세스 주소 공간
- Extendable hashing
- 네트워크
- SQL
- 운영체제
- 쉬운코드
- B tree 데이터삽입
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- 데이터베이스
- 백엔드
- 쉬운 코드
- 반효경
- 운영체제와 정보기술의 원리
- Git
- 커널 동기화
- 개발남노씨
- concurrency control
- 코딩애플
- CPU 스케줄링
- 시스템프로그래밍
- 코딩테스트 [ ALL IN ONE ]
- 트랜잭션
- recoverability
- Today
- Total
티끌모아 태산
프로세스(Process)(1) 본문
프로세스의 개념
⭐️프로세스란(Process)란 실행중인 프로그램(program in execution)이다. 즉, 디스크에 존재하던 실행파일(file.exe) 형태인 프로그램이 메모리에 올라가면 프로세스가 되며, 이 프로세스는 CPU를 획득해 자신의 코드를 수행하기도 하고 때로는 CPU를 반환하고 입출력을 수행하기도 한다. 그러다가 자신의 수행을 다하면 종료되어 사라진다.
- 프로그램: 함수들로 이루어진 즉, 명령어, 코드 및 정적인 데이터의 묶음이며 아직 실행되지 않은 상태
⭐️프로세스와 스레드에 대해 간단하게 설명하면 프로세스는 위에서 설명한 것 처럼 현재 실행 중인 프로그램을 의미하며 스레드는 프로세스 내부에서 실행되는 작업 흐름의 단위를 의미한다.
프로세스와 쓰레드(Thread)의 개념을 이해하는 것은 정말 중요하다. 이 개념을 잘 알고 있어야 왜 스프링의 멀티스레드 환경에서 상태값을 갖도록 설계하면 안되는지 알 수 있고 특히 프로세스의 메모리 영역(Stack, Heap, Data, Text)에서 스레드가 프로세스와 공유하지 않는 영역(Stack)에 대해서 제대로 알고 있어야한다. 그래서 이 개념들 자바와 스프링에 접목시켜서 현업에서 동시성 이슈를 어떻게 피할 수 있는지 공부해야 한다.
- 스레드는 프로세스와 Stack 영역만 공유하지 않고 나머지는 공유한다, 즉 스레드는 Stack영역을 따로 할당 받는다. 그 이유는 다음과 같다.
- 스레드는 독립적인 수행을 위해 존재한다 즉, 독립적으로 함수를 호출 할 수 있어야 한다. 따라서 함수의 매개변수, 지역 변수 등을 저장하는 스택 메모리 영역은 독립적으로 할당 받아야한다.
⭐️기본적으로 하나의 프로세스가 생설될 때 하나의 스레드도 함께 생성된다. 프로세스는 자신만의 독자적인 주소 공간을 할당 받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용한다는 차이가 있다.
- Code: 프로그램의 코드(프로그램 명령)
- Data: 전역 변수
- Heap: 동적으로 할당되는 메모리
- Stack: 매개 변수, 지역변수 등 임시적인 자료
프로세스를 이해하기 위해서는 프로세스 문맥에 대해 알아야한다. 프로세스 문맥이란 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미한다. 프로세스 문맥이 필요한 이유는 프로세스가 타이머 인터럽트나 시스템 콜, 입출력 요청 등으로 CPU의 제어권이 넘어갔다가 다시 넘겨 받아 수행하기 위해서는 CPU보유 시기에 어느 부분까지 명령을 수행했었는지 직전 수행 시점의 정확한 상태를 알아야 하기 때문이다.
프로세스의 상태
프로세스의 상태는 기본적으로 실행(running), 준비(ready), 봉쇄(blocked, wait, sleep)상태로 구분할 수 있다. 이와같이 상태를 구분하는 이유는 프로세스를 효율적으로 관리하기 위해서다.
- 실행 상태: 프로세스가 CPU를 할당 받아 명령를 수행중인 상태
- 준비 상태: 프로세스가 CPU만 획득하면 명령을 실행할 수 있지만 CPU를 할당 받지 못한 상태. 각각 우선 순위를 부여해서 우선 순위가 높은 프로세스가 다음 순서에 CPU를 할당 받는다
- 봉쇄 상태: CPU를 할당 받더라도 당장 명령을 수행할 수 없는 상태로 예를들어, 프로세스 실행 중 타이머 인터럽트, 입출력 요청 등으로 인해 CPU를 양도하고 자신의 차례 혹은 입출력 처리가 완료되기 까지 기다리는 상태가 있다. 대기 리스트에서는 우선순위 없음.
⭐️문맥교환이란 CPU를 양도하기 위해 원래 프로세스의 문맥(상태)을 저장하고 새로운 프로세스의 문맥(상태) 세팅하는 과정을 말한다. 이는 디스패치 개념과 연관이 있는데, 디스패치란 준비 상태에 있는 여러 프로세스(Read list) 중 실행될 프로세스를 선정(Scheduling)하여 CPU를 넘겨주는 과정(Dispatching)을 말한다.
⭐️스케줄링이 무엇인지와 목적에 대해서 알아보면 스케줄링은 프로세스에게 필요한 자원(CPU 등)을 어떻게 할당할 것인지 선택하는 알고리즘이다. 단위 시간당 처리량을 최대화하고 효율적으로 자원을 할당하기 위한 목적을 갖고있다.
'CS 지식 > 운영체제' 카테고리의 다른 글
프로세스(Process)(2) (0) | 2023.07.31 |
---|---|
프로그램의 구조와 실행 (0) | 2023.07.28 |
컴퓨터 시스템의 동작 원리 (0) | 2023.07.26 |