티스토리 뷰
● 도입
프로그램이란?
- 하드디스크와 같은 저장 장치(HDD, SSD)에 저장된 명령문의 집합체
- application, app 이라고도 불리고 Window OS에서는 .exe 파일의 모습을 하고있다.
프로세스란?
- 간단히 말해 실행중인 프로그램
- 실행중인 프로그램 : 하드디스크에 저장된 프로그램이 메모리(RAM)에 올라갔을 때 실행중인 프로그램이라고 한다.
- PC의 관점에서 프로그램은 저장 장치만 사용하는 수동적인 존재이다.
- 프로세스는 메모리(RAM)도 사용하고 OS의 CPU 스케줄링 알고리즘에 따라서 CPU도 사용하고 필요에 따라 입출력을 하기 때문에 동적인 존재라고 할 수 있다.
- 이러한 프로세스는 CODE 영역, DATA 영역, HEAP 영역, STACK 영역 등으로 이루어져 있다.
CODE 영역에는 자신을 실행하는 코드가 저장되어 있다.
DATA 영역에는 전역 변수와 static(정적) 변수가 저장되어 있다.
HEAP 영역은 프로그래머가 동적으로 메모리를 할당하는데 사용된다.
C에서 malloc, free 함수를 호출하면 Heap 영역의 자원을 할당/해제할 수 있다.
STACK 영역에는 지역 변수와 함수 호출 시 필요한 정보들이 저장된다.
● 프로세스가 되는 과정
- 개발자가 작성한 코드가 메모리에 올라가서 프로세스가 되는 과정을 알아보자(C언어 기준으로 설명)
- 아래의 코드는 2개의 숫자를 더해주는 매우 간단한 코드이다.(파일명 : test.c)
- C는 컴파일 언어이기 때문에 컴파일을 필수적으로 해야 실행 가능하다.
- 위의 소스코드(test.c)가 컴파일을 거쳐 test.exe 프로그램으로 만들어지는 과정은 아래와 같다.
1. 전처리기를 거쳐서 매크로로 정의한 숫자를 치환하고 필요한 파일을 불려온다.
- 전처리기를 거치면 파일의 확장자는 .i 가 된다.
2. 컴파일러가 컴파일을 해준다.
- 컴파일을 마치면 고수준인 C언어가 저수준인 어셈블리어로 바뀐다.
- 어셈블리어는 명령어와 기계어가 일대일 매칭이 되기 때문에 기계어와 가장 가까운 언어이다.
- 컴파일러를 거치면 파일의 확장자는 .s 가 된다.
3. 어셈블러가 어셈블리어를 기계어로 바꿔준다.
- 이렇게 되면 해당 파일은 0과 1로 이루어진 기계어로 구성된다.
- 기계어로 구성돼 있기 때문에 text editor로 해당 파일을 열면 텍스트가 깨져서 보인다.
- 파일의 확장자는 .o 가 된다.
4. 링커가 링킹을 한다.
- 여러가지 라이브러리나 다른 소스코드를 연결해준다고 생각하면된다.
5. 링킹까지 거치면 파일의 확장자는 .exe 가 된다.
- 이제 해당 파일을 더블클릭하면 하드디스크에 있는 test.exe 프로그램이 메모리에 올라가게 되고 이렇게 올라간 프로그램은 프로세스라는 이름으로 불리게 된다.
- 이제 해당 프로세스는 운영체제(OS)에 의해 관리된다.
cf) 어셈블리어는 이렇게 생겼다.
- OS 전략에 따라 프로세스가 실행되는데 이를 CPU 관점에서 살펴보자
- CPU는 0과 1과 같은 기계어만을 실행하는데 0과 1만을 이용해 CPU 관점을 설명하는 것은 어려우니 기계어와 가장 가까운 어셈블리어를 이용해 알아보자
1. CPU내 제어 장치가 숫자 5와 7을 메모리에 저장한다.
2. 메모리에 저장된 값을 edx, eax 레지스터로 가져온다.
3. 제어 장치가 레지스터에 저장된 5와 7을 가지고 더하라는 명령을 하면 산술논리 연산장치가 두 숫자를 더하고 그 결과는 eax 레지스터에 저장한다.
4. 다시 제어장치가 eax 레지스터에 저장된 값인 12를 가져와서 메모리에 저장시킨다.
cf)
'CS > 운영체제' 카테고리의 다른 글
#7 PCB(Process Control Block) - 프로세스 제어 블록 (0) | 2023.02.22 |
---|---|
#6 유니프로그래밍, 멀티프로그래밍, 멀티프로세싱 (0) | 2023.02.21 |
#4 컴퓨터 부팅과정 & 인터럽트 (0) | 2023.02.17 |
#3 컴퓨터 하드웨어와 구조(feat 폰 노이만 구조) (0) | 2023.02.12 |
#2 운영체제 구조 with kernel (0) | 2023.02.09 |
- Total
- Today
- Yesterday
- Phaser
- DART
- node.js
- jpa
- OS
- 프로그래머스
- git
- API
- 빅데이터
- Stream
- 메모리
- MySQL
- 빅데이터 분석기사
- 코딩테스트
- Java8
- 코테
- 알고리즘
- Spring Boot
- nosql
- SpringBoot
- Advanced Stream
- MongoDB
- db
- 프로세스
- java
- spring
- 자료구조
- Phaser3
- 운영체제
- SQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |