일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- db
- MVVM
- OS
- 안드로이드 개발
- 운영체제
- 안드로이드
- CS지식
- 앱개발
- github
- 디자인 패턴
- 앱 개발
- 개발
- 안드로이드 디자인 패턴
- 앱
- 리액트
- 리액트네이티브
- 액티비티
- 데이터베이스
- 디자인패턴
- 스레드
- Kotlin
- 메모리
- 코틀린
- React
- cs
- Database
- reactnative
- 프로세스
- Operating System
- Android
- Today
- Total
Tech Log
[Operating System] 프로세스(Process) 본문
프로세스(process)
컴퓨터에서 실행되고 있는 프로그램.
실행을 위해 메모리에 올라온 동적인 상태이다.
CPU 스케줄링의 대상인 작업(task)과 거의 같은 의미를 가진다.
* 스레드(thread) : 프로세스 내 작업의 흐름
프로그램의 실행 과정
프로그램은 메모리에 올라가면서 실행된다.
프로그램이 메모리에 올라가면 프로세스가 된다.
이때 프로그램은 인스턴스화가 된다.
프로세스는 CPU 스케줄러에 따라 순서에 맞게 실행된다.
프로세스와 컴파일 과정
프로그램은 컴파일러가 컴파일 과정을 거친 후,
컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것이다.
이 프로그램은 C 언어 기반의 프로그램이며,
인터프리터 언어로 된 프로그램과는 다르다.
1. 전처리
소스 코드의 주석을 제거하고,
#include 와 같은 헤더 파일을 병합하여 매크로를 치환한다.
*매크로(macro) : 프로그램 내에서 반복적으로 사용되는 단어 또는 수행할 문장을 특정한 심벌(symbol)로 표기하는 것
예)#define PI 3.14
2. 컴파일러
오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환한다.
3. 어셈블러
어셈블리어는 목적 코드(object code)로 변환된다.
이때 목적 코드의 확장자는 운영체제마다 다른데, 리눅스에서는 .o 가 된다.
4. 링커
프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합한 뒤,
실행 파일을 만든다.
실행 파일의 확장자는 .exe 또는 .out 이 된다.
정적 라이브러리
프로그램 빌드 시에 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식.
시스템 환경 등 외부 의존도가 낮다.
코드 중복과 같이 메모리 효율적이 안좋다.
동적 라이브러리
프로그램 실행 시 필요할 때만 DLL 이라는 함수 정보를 통해 참조하는 방식.
메모리 효율성은 정적 라이브러리 사용할 때보다 좋다.
다만 외부 의존도가 높아진다.
프로세스의 메모리 구조
프로세스는 스택(stack), 힙(heap), 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)으로 나눠진다.
스택
운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳.
프로세스 내에서 함수를 호출하면 함수를 수행하고,
원래 프로그램으로 되돌아올 위치를 스택 영역에 저장한다.
지역변수, 매개변수, 함수가 저장된다.
위 주소부터 할당된다.
운영체제가 사용자의 프로세스를 작동하기 위해 유지하는 영역이므로 사용자에게는 보이지 않는다.
컴파일 시에 크기가 결정되며 동적인 특성을 갖는다.
스택 영역은 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있다.
이때 힙과 스택 메모리 영역이 겹치면 안된다.
따라서, 힙과 스택 사이의 공간을 비워 놓는다.
힙
동적 할당할 때 사용된다.
아래 주소부터 할당된다.
런타임 시에 크기가 결정된다.
힙은 동적인 특성을 갖는다.
스택 vs 힙
스택 | 힙 | |
액세스/할당 속도 | 빠름 | 느림 |
메모리 관리 | 자동(CPU에 의해 관리) | 수동 |
구현 난이도 | 쉬움 | 어려움 |
비용 | 적게 든다 | 많이 든다 |
스택과 힙을 나눠 놓은 것은,
목적에 따라 스택과 힙을 선택해서 사용하여
효율적으로 메모리를 사용하기 위함이다.
데이터 영역
코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳.
전역변수, 정적변수가 저장된다.
데이터는 변하는 값이기 때문에 이곳의 내용은 기본적으로 읽기와 쓰기가 가능하다.
정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어있다.
BSS(Block Started by Symbol) 영역과 Data 영역으로 나뉜다.
BSS 영역은 초기화 되지 않은 변수가 0으로 초기화되어 저장된다.
Data 영역은 0이 아닌 다른 값으로 할당된 변수들이 저장된다.
코드 영역
프로그램의 본문이 기술된 곳이며,
프로그램에 내장되어 있는 소스 코드가 들어가는 영역.
프로그래머가 작성한 코드가 탑재된다.
이 코드는 읽기 전용이다.
수정 불가능한 기계어로 저장되어 있다.
정적인 특성을 가진다.
참조
- 주홍철, 면접을 위한 CS 전공지식 노트, 길벗(2022)
- 조성호, 쉽게 배우는 운영체제, 한빛아카데미(2018)
- 윌리의 Technical Reference
- 노는 게 제일 좋아
- 개발이 즐겁다!
'Computer Science > Operating System' 카테고리의 다른 글
[Operating System] PCB(Process Control Block) (0) | 2023.02.11 |
---|---|
[Operating System] 프로세스의 상태 (0) | 2023.02.10 |
[Operating System] 페이지 교체 알고리즘 (0) | 2023.01.28 |
[Operating System] 메모리 할당 (1) | 2023.01.28 |
[Operating System] 가상 메모리 (2) | 2023.01.28 |