프로세스란? 프로그램과 프로세스는 똑같은거 아닌가?
프로그램을 실행시키면 프로세스가 된다. 프로세스 = 실행 중인 프로그램
목차
- 프로그램과 프로세스
- 프로세스 제어목록(PCB, Process Control Block)
- 프로세스의 상태
- 프로세스의 관리
- 프로세스의 구조
- 컴파일 과정(Compile)
- CPU(중앙처리장치) 구성요소
프로그램(Program)
- 저장장치(HDD, SDD)에 저장된 명령문의 집합체 (= 애플리케이션, 앱)
- Windows : .exe / MacOS : .app
- 수동적
프로세스(Process)
- 실행 중인 프로그램
- 저장장치에 있는 프로그램이 메모리에 올라갔을 때
- 운영체제에 의해서 관리됨
- 능동적 : 메모리, CPU 사용, 입력/출력 작업
프로세스 제어목록(PCB, Process Control Block)
- 프로세스 정보를 담고 있는 자료구조
- 구성요소
- PID(Process IDentification) : 식별번호
- 프로세스 상태
- 프로그램 카운터 : CPU가 다음으로 실행할 명령어를 가리키는 값(메모리 주소)
- 스케줄링 우선순위
- 권한 : 프로세스가 접근할 수 있는 자원
- 부모, 자식 프로세스 : 프로세스는 트리 계층 관계를 가지고 있음.
- 프로세스의 데이터와 명령어가 있는 메모리 위치를 가리키는 포인터
- 프로세스에 할당된 자원들을 가리키는 포인터
프로세스의 상태
- 구성요소
- 생성(create) : 프로세스가 생성되는 중이다.
- 실행(running) : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.
- 준비(ready) : 프로세스가 CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태로, CPU가 할당되기를 기다리고 있다. 일반적으로 준비 상태의 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받는다.
- 대기(waiting) : 보류(block)라고 부르기도 한다. 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 말한다.
- 종료(terminated) : 프로세스의 실행이 종료되었다.
프로세스의 관리
- 운영체제는 프로세스의 상태를 실행(running), 준비(ready), 블록(block) 상태로 분류하고 프로세스들을 상태전이(state transition)를 통해 체계적으로 관리.
- 이 과정을 디스패칭(dispatching)이라고 함. 디스패처(dispatcher)가 이 일을 수행.
프로세스의 구조
- 코드(CODE) : 자신을 실행하는 코드가 저장되어 있음
- 데이터(DATA) : 전역 변수, Static(정적) 변수 저장
- 힙(HEAP) : 프로그래머가 동적으로 메모리를 할당(ex. malloc(), free() )
- 스택(STACK) : 지역변수, 매개변수 저장
컴파일 과정(Compile)
확장자(.c) → 전처리기 → 확장자(.i) → 컴파일러 → 확장자(.s) → 어셈블러 → 확장자(.o) → 링커 → 확장자(.exe)
- 전처리기(Preprocessor) : 코드에 포함된 전처리기 구문(ex. #define ~, #include ~)을 처리하는 것.
- 컴파일러(Compiler) : C와 같은 고급 언어를 CPU 가 이해할 수 있는 기계어로 변환(ex. 어셈블리어)
- 어셈블러 : 컴파일 한 파일을 완전한 기계어로 바꿔줌
- 링커(Linker) : 여러개의 오브젝트 파일을 하나로 합치거나, 라이브러리를 합칠 때 필요함.
CPU(중앙처리장치) 구성요소
- 제어장치(Control Unit, CU) : 주기억 장치에 저장되어 있는 명령어(프로그램)을 순서대로 호출하여 해독한 후, 제어 신호를 발생시켜 컴퓨터의 각 장치를 동작하도록 하는 장치
- 연산장치 = 산술논리 연산장치(Arithmetic and Logical Unit, ALU) : 연산에 사용될 데이터를 받아 제어 장치가 지시하는 순서에 따라 산술 연산과 논리 연산을 실행하여 그 결과를 레지스터 혹은 누산기(Accumulator)에 저장
- 레지스터(Register) : CPU 내부에서 처리할 명령어나 연산의 결과나 주소 등을 일시적으로 기억하는 임시 기억 장소
출처
'IT > OS' 카테고리의 다른 글
[OS] 좀비 프로세스(Zombie Process)란? 부모프로세스와 자식프로세스 (0) | 2022.01.15 |
---|---|
[OS] 멀티프로그래밍과 멀티프로세싱(Feat. PCB, Context Switching) (0) | 2022.01.15 |
[OS] 운영체제 기초(운영체제의 역사/구조, 하드웨어 구조, 인터럽트), 인프런 - '비전공자를 위한 운영체제' 수강 후기 (0) | 2022.01.11 |
[OS] AMD64란? x86/x64 차이, IA-32(VirtualBox only runs on the amd64 architecture) (0) | 2022.01.11 |
[Windows] Windows Server 2019 인프런 강의 수강 후기, Virtual Box 설치 (0) | 2022.01.10 |
댓글