본문 바로가기
cs/면접을 위한 CS 전공지식 노트

3-3. 프로세스와 스레드(1): 프로세스의 컴파일과정, 상태, 메모리 구조, PCB

by 이쟝 2022. 10. 10.
더보기

3-1. 프로세스와 컴파일 과정

프로세스(process) 컴퓨터에서 실행되고 있는 프로그램, CPU 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 사용
운영체제에 의해 메모리 공간을 할당받아 CPU에서 실행/제어 되고 있는 프로그램
프로그램으로부터 인스턴스화 된 것(프로그램이 메모리에 적재되면 프로세스가 되는 인스턴스화가 일어나고, 후에 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다.
스레드(thread) 프로세스 내 작업의 흐름

 

프로세스(process) 프로그램(program)
메모리 구조를 이루고, 현재 어떤 자원을 사용하는지에 대한 관련 정보가 들어있는 동적인 개체 컴파일한 코드, 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체

프로그램과 프로세스

  • ex) 프로그램 = 구글 크롬 프로그램(chrome.exe)과 같은 실행 파일이며, 이를 두 번 클릭하면 구글 크롬 '프로세스'가 시작되는 것이다. 

프로그램의 컴파일 과정

프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미한다.

여기서 말하는 프로그램이란 C 언어 기반의 프로그램을 의미하며, 이는 별도의 컴파일 과정없이 한 번에 한 줄씩 읽어들여서 실행하는 프로그램인 인터프리어 언어(파이썬 등)로 된 프로그램과는 다르다.

프로그램의 컴파일 과정

1. 전처리(Preprocessor) - 전처리기(cpp)

소스 코드의 주석 제거 및 헤더 파일(#include)을 병합해 매크로를 치환한다.

  • #include, #define 등 #으로 시작하는 문법 사항이 적절히 전처리된 C 언어 '소스파일' 생성

2. 컴파일러(Compilation) - 컴파일러(cc1) 

오류처리, 코드 최적화 작업을 하며 C언어를 어셈블리어로 변환한다.

  • C 언어 소스파일은 컴파일 과정을 거쳐 '어셈블리 소스 파일'이 된다.

3. 어셈블(Assemble) - 어셈블러(as)

어셈블리어는 목적 코드(object code)로 변환

  • 어셈블리 소스 파일은 어셈블 과정을 거쳐 '목적 파일(object code)'이 된다. 
  • 확장자는 운영체제마다 다름(리눅스는 .o)

4. 링크(Linking) - 링커(Id)

프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행 파일을 만든다.

  • 목적 코드는 라이브러리와 링크되어 '실행 가능한 파일(binary file)'이 된다.
  • 실행 파일의 확장자는 .exe 또는 .out 이라는 확장자를 갖는다.

컴파일 후 링킹 과정을 거치며, 결과물은 컴퓨터가 이해할 수 있는 바이너리 파일(Binary file)로 만들어지며 이 파일을 실행하면 주기억장치(RAM)로 적재되어 시스템에서 동작하게 된다.

정적 라이브러리와 동적 라이브러리

라이브러리는 재사용이 필요한 기능이 반복적인 코드 작성을 하지 않고 언제든지 필요한 곳에서 호출해 사용한다!!

링크될 수 있도록 보통 컴파일 된 형태인 목적 코드(object code) 형태로 존재해 미리 컴파일 되어 있기 때문에 컴파일 시간도 단축된다.

  • 정적 라이브러리와 동적 라이브러리의 가장 큰 차이점: 실행파일에 링킹되는 시점(되고, 된다.)
  • 자주 라이브러리를 로드하는 실행파일이면 정적으로 하는게 좋다. (동적은 라이브러리 로드/언로드에 시간이 소요하게 되므로) 

 

정적 라이브러리(static library) 동적 라이브러리(dynamic library)
정적 라이브러리는 컴파일 시 함수가 실행파일에 포함 동적 라이브러리는 실행(런타임)시  함수가 실행파일에 포함
프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식 프로그램 실행 시 필요할 때만 DLL이라는 함수 정보를 통해 참조하는 방식(동적으로 링크해 사용하는 라이브러리)
라이브러리의 동작 코드가 이를 사용하는 실행 바이너리 속에 포함되서 별도의 추가 작업 없이, 독립적으로 라이브러리 함수들을 사용할 수 있다.
=> 시스템 환경 등 외부 의존도가 낮다.
실행파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않아서 실행파일의 크기가 작아진다.
=> 메인 메모리의 공간 효율성이 높다.
코드 중복으로 인해 불필요하게 실행 파일들의 크기가 커지고, 메인 메모리의 공간 효율이 떨어진다. 실행 파일은 함수에 대한 정보만 가지고 있을 뿐 실제 코드를 가지고 있지 않아서 프로그램 실행 시 항상 dll 파일이 존재해야 한다. => 외부 의존도가 높아진다.
.a : 리눅스 / .lib : 윈도우 .so : 리눅스 / .dll 윈도우
ex) 실행파일이 1메가, 라이브러리가 100메가의 용량이 있을 때, 컴파일 시 라이브러리가 실행파일에 포함되어서 컴파일 후 실행파일의 용량이 101메가가 된다. ex) 실행파일이 1메가, 라이브러리가 100메가의 용량이 있을 때,실행파일은 그대로 1메가, 라이브러리 100메가로 따로 존재하게 된다.
즉 실행파일이 101메가 이므로, 실행 시작부터 종료시까지 101메가의 메모리를 사용한다. 즉 실행파일이 1메가 이어서, 메모리를 1메가만 사용하고 필요시 100메가의 라이브러리를 로드하고 불 필요시 100메가 반환한다.

3-2. 프로세스의 상태

프로세스의 상태

1. 생성 상태(create)

프로세스가 생성된 상태, 작업을 커널에 등록하고, PCB를 할당한다.

  • fork( ) 또는 exec( ) 함수를 통해 생성한다.
  • 가용 메모리 공간 체크, 할당받을 수 있는 메모리가 있는지 확인한다.
  • 메모리가 할당되면, 대기(ready)상태로, 할당받을 수 있는 메모리가 없으면 대기 중단 상태(ready suspended)
fork( ) exec( )
부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수 새롭게 프로세스를 생성하는 함수
주소 공간만 복사할 뿐 부모 프로세스의 비동기 작업 등을 상속하지는 않는다.

2. 대기상태(ready) : '자원'만 있는 상태

프로세서를 할당받으려고 기다리고 있고, 프로세서를 할당받으면 즉시 실행이 가능한 상태, 즉 CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태

  • 대기 상태에 있는 프로세서에 CPU가 할당되면 디스패치(Dispatch)라고 하며, 해당 프로세스는 '실행 상태(running)'로 바뀌게 된다. 
  • 메모리 공간이 충분하면 메모리를 할당받고 아니면 아닌 상태로 대기

3. 실행 상태(running) : 자원 + CPU

프로세서를 점유해 명령어가 실행되는 상태(필요한 자원 및 프로세서를 모두 할당받음) 즉, 프로세스가 CPU를 차지하고 실행하고 있는 상태

  • CPU 소유권과 메모리를 할당받고 인스트럭션을 수행 중인 상태이며, CPU burst가 일어났다고도 표현함
  • 할당된 CPU 시간을 초과 사용시 타임아웃(Timeout)이 발생함
  • 타임아웃이 발생하면 운영체제가 프로세서 제어권을 갖게 되어 '실행 상태(running)'의 프로세서를 '대기 상태(ready)'로 변경함

4. 중단 상태(blocked) : CPU 없음, 자원 일부 없음

이벤트나 입출력 대기 신호 발생을 기다리며 프로세스가 차단된 상태. 즉, CPU를 할당해주어도 실행할 수 없는 상태(I/O request, 다른 프로세스가 끝날 때까지 대기 등등)

  • 프로세서에서 실행을 하다 입출력 연산 or 새로운 자원 요청 등의 문제가 발생하면 '실행 상태(running)'에서 '중단 상태(blocked)'로 변경됨 => event wait
  • I/O 디바이스에 의한 인터럽트로 이런 현상이 많이 발생하기도 한다.
  • 자원을 할당받게 되면 '중단 상태(blocked)'에서 다시 '대기 상태(ready)'로 변경된다. => event occurs
  • ex) 프린트 인쇄 버튼을 눌렀을 때 프로세스가 잠깐 멈춘 듯할 때의 상태 

5. 대기 중단 상태(ready suspended)

다른 자원을 할당 받은 상태이지만 프로세서 및 메모리를 할당 받지 못한 상태, I/O 작업이나 요청한 작업이 끝났지만 메모리에 자리가 없어 여전히 하드디스크에 있는 상태

Suspended: 메모리에서 꺼내서 하드디스크로 옮기는 것, Queue에 있는 프로그램의 포인터를 이용해서 옮긴다.

6. 일시 중단 상태(blocked suspended) 

프로세스, 메모리, 기타 자원 모두 할당받지 못한 상태

  • 요청한 작업이 끝나지 않았고, 메모리에 있던 프로세스들이  Swaping으로 인해 하드디스크로 내려간 상태

7. 종료 상태(terminated)

프로세스 수행이 끝난 상태 즉, 프로세서, 메모리 등 모든 자원을 반납한다.

  • 자연스럽게 종료되는 것도 있지만 부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료(abort)도 있다.
  • (1)자식 프로세스에 할당된 자원의 한계치를 넘어서거나 (2)부모 프로세스가 종료되거나 (3)사용자가 process, kill 등 여러 명령어로 프로세스를 종료할 때 발생한다. 
  • 커널 내 일부 PCB 정보를 남겨, 프로세스 관리를 위한 정보 수집하기 위한 단계로 이 단계가 끝나면 프로세스는 삭제, 소멸된다.
Blocked(중단)
-> Blocked Suspended(일시 중단)
메모리에 올라와 있는 프로세스들이 모두 요청한 작업을 하느라 block 상태고, 하드디스크에 Swapped 되었던 프로세스들을 메모리에 올려야 한다. 
그러기 위해 메모리에 있던 프로세스들을 하드디스크와 Swapped Area로 옮긴다. 
Blocked Suspended(일시 중단)
-> Blocked(중단)
요청한 작업이 다 끝나지 않았지만 공간이 충분히 있을 경우 다시 메모리로 올라갈 수 있다.
Blocked Suspended(일시 중단)
-> Ready Suspended(대기 중단)
요청한 작업이 다 끝났지만 메모리에 공간이 없는 경우 Ready Suspended 상태로 옮긴다.
Ready Suspended(대기 중단)
-> Read(대기)
Ready Suspended 상태에서 대기하던 중 메모리에 공간이 생겨 다시 Ready 상태로 변경한다.
Ready(대기)
-> Ready Suspended(대기 중단)
여러 suspend 이유로 Ready에서 Ready Suspended로 옮겨질 수 있다.
ex) 프로세스의 우선순위 때문에 메모리에 공간을 만들어야 할 경우 Ready Suspended 상태로 옮겨진다. 
Create
-> Ready Suspended(대기 중단)
만약 메모리가 가득 차 있는 경우라면 OS는 New 상태에서 Ready Suspended 상태로 Admit 한다.

3-3. 프로세스의 메모리 구조

운영체제는 프로세스에 적절한 메모리를 할당하는데 다음 구조를 기반으로 할당한다.

위에서부터 스택(stack), 힙(heap), 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)으로 나누어진다. =>> 이러한 주소 공간을 가상 메모리 (또는 논리적 메모리: logical memory)라고 부른다.

스택은 위 주소부터 할당(위에서 아래로)되고 힙은 아래 주소(아래에서 위로)부터 할당된다.

프로세스의 메모리 구조

스택(stack): 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값)

지역변수, 매개변수, 함수등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역, 컴파일 시에 크기가 결정되며 '동적'인 특징을 갖는다.

  • 함수 호출 시 할당되고 함수 반환 시 소멸된다. 
  • 컴파일 시 data, stack 영역의 크기를 계산해 메모리 영역을 결정한다.
  • 스택 영역은 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있는데, 이때 힙과 스택의 메모리 영역이 겹치면 안되기 때문에 힙과 스택 사이의 공간을 비워 놓는다.

힙(heap): 프로그래머가 필요할 때 사용하는 공간

동적 할당할 때 사용되며 런타임 시 크기가 결정된다.

  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역
  • 자바에서는 객체가 heap 영역에 생성되고 Garbage Collect에 의해 정리된다. 
  • ex) 벡터 같은 동적 배열은 힙에 동적 할당된다. 힙은 '동적'인 특징을 가진다.

데이터 영역(data): 프로그램이 사용하는 데이터 공간 / 전역변수, 정적변수

전역변수, 정적변수가 저장되고, 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어 있는 영역

  • 전역변수 또는 static 값을 참조한 코드는 컴파일이 완료되면 data 영역의 주소값을 가르키도록 바뀐다.
  • 전역변수가 변경될 수도 있어 Read-Write로 되어있다. 

 

BSS 영역(Bloc Stated Symbol segment) Data 영역(Data segment)
초기화 되지 않은 전역 변수가 0으로 초기화되어 저장 0이 아닌 다른 값으로 할당된 변수들이 저장

코드 영역(code): 사용자가 작성한 프로그램 함수

프로그램에 내장되어 있는 소스 코드가 들어가는 영역

  • 실행할 프로그램의 코드가 저장되고, CPU는 이 영역에서 명령을 하나씩 가져와 처리한다.
  • 수정 불가능한 기계어로 저장되어 있고 정적인 특징을 가진다.
  • 중간에 코드를 바꿀 수 없게 Read-Only로 되어있다.

3-4. PCB(Process Control Block)

운영체제에서 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세서의 상태 정보를 저장하는 자료구조

  • 메타데이터를 저장한 '데이터', 프로세스 제어 블록이라고도 한다.
  • 프로그램이 실행(1)되면 프로세스가 생성(2)되고 프로세스 주소 값들에 앞서 설명한 스택, 힙 등의 구조를 기반으로 메모리가 할당(3)된다. 즉, 프로세스가 생성되면 운영체제는 해당 PCB를 생성하고 프로세스가 완료되면 PCB는 제거된다.
  • 프로세스의 메타데이터들이 PCB에 저장되어 관리된다. => 프로세스의 중요한 정보를 포함하고 있어서 사용자가 접근하지 못하게 커널 스택의 가장 앞부분에서 관리된다.
메타데이터: 데이터에 관한 구조화된 데이터이자 데이터를 설명하는 작은 데이터, 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대해 부여되는 데이터

PCB의 구조

프로세스 식별자(Process ID) 해당 프로세스의 자식 프로세스  ID
프로세스 (스케줄링) 상태(Process State) 생성, 준비, 실행, 대기, 완료 상태 등 프로세스가 CPU에 대한 소유권을 얻은 이후의 상태
프로그램 계수기(Program Counter) 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
CPU 레지스터 및 일반 레지스터 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
CPU 스케줄링 정보 우선 순위, 최종 실행시각, CPU 점유시간, CPU 스케줄러에 의해 중돤된 시간 등에 대한 정보
메모리 관리 정보 해당 프로세스의 주소 공간 등
프로세스 계정 정보 프로세스에 실행된 CPU 사용량, 유저의 정보, 페이지 테이블, 스케줄링 큐 포인터 등
I/O 상태 정보  프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등
프로세스 권한  컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보

컨텍스트 스위칭(context switching)

스케줄러가 기존 실행 프로세스를 우선순위 때문에 미루고 새 프로세스로 교체해야 할 때 프로세스 상태 값을 교체하는 작업 즉, PCB를 교환하는 과정

  • 한 프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발생한다. (입/출력을 요청할 때, CPU 사용시간이 만료되었을 때, 자식 프로세스를 만들 때, 인터럽트 처리를 기다릴 때)
  1. CPU가 어떤 프로세스를 실행하고 있는 상태인데
  2. 운영체제의 스케줄러가 인터럽트를 진행해서 더 높은 우선순위를 가진 프로세서가 실행되어야 할 때
  3. 스케줄러가 레지스터에 저장된 기존 프로세스 정보 값이나 기존 프로세스 상태 값을 커널 내부에 존재하는 PCB에 저장한다.
  4. 새 프로세스(더 높은 우선순위를 가짐)의 정보 값이나 새 프로세스 상태 값을 PCB에서 다시 가져와 교체하는 작업
스케줄러(scheduler) 어떤 프로세스에게 자원을 할당할지 순서와 방법을 결정하는 운영체제 커널의 모듈
커널(kernal) 메모리에 상주하는 운영체제의 부분
콘텍스트(context) CPU가 해당 프로세스를 실행하기 위한 프로세스의 정보
  • 컴퓨터는 많은 프로그램을 동시에 실행하는 것처럼 보이지만 어떠한 시점에서 실행되고 있는 프로세스는 단 한 개이다. 다른 프로세스와의 컨텍스트 스위칭이 아주 빠른 속도로 실행되기 때문에 프로그램이 동시에 실행되는 것처럼 보인다.
  • 현대 컴퓨터는 멀티코어의 CPU를 가지기 때문에 한 시점에 한 개의 프로그램이라는 설명은 틀린 설명이지만 컨텍스트 스위칭을 설명할 때는 싱글코어를 기준으로 설명한다. 

콘텍스트 스위칭 단점 - 오버헤드(Overhead)로 인한 성능 저하

콘텍스트 스위칭이 잦게 발생할수록 오버헤드(사용된 시간과 사용된 메모리의 양) 비용이 발생하여 성능이 떨어진다. 

컨텍스트 스위칭(Context Switching)

p0의 PCB를 저장(save state into PCB0) -> p1의 PCB를 로드(reload state from PCB1) -> 인터럽트 또는 시스템 콜(interrupt or system call) -> p1의 PCB를 저장(save state into PCB1) -> p0의 PCB를 로드(reload state from PCB0)

  1. 한 개의 프로세스 p0이 실행하다 멈추고, 프로세스 p0의 PCB를 저장하고 다시 프로세스 p1를 로드해 실행한다.
  2. 다시 프로세스 p1의 PCB를 저장하고 다시 p0의 PCB를 로드한다. 
  3. 컨텍스트 스위칭이 일어날 때 위처럼 유휴 시간(idle time)이 발생하는 것을 볼 수 있다. 
위에서 프로세스 p0이 실행 중인 상태(executing)에서 유후 상태(idle)가 될 때 프로세스 p1이 곧바로 executing되지 않고 idle을 좀 더 하다가 executing 된다.
이 과정을 거치는 이유는 p0의 상태를 PCB에 저장하고 프로세스 p1의 상태를 PCB에서 가져오기 때문이다.
이 과정에서 PCB를 저장하고 가져올 때 CPU는 아무 일도 하지 못하게 된다. 따라서 아무 일도 하지 못하게 되는 상황이 잦을 수록 성능 저하로 이어진다.

비용: 캐시미스

컨텍스트 스위칭에 드는 비용

  • 컨텍스트 스위칭이 일어날 때 프로세스가 가지고 있는 메모리 주소가 그대로 있으면 잘못된 주소 변환이 생기기 때문에 캐시클리어 과정을 겪게 되고 이 때문에 캐시미스가 발생한다.

스레드에서의 컨텍스트 스위칭

이 컨텍스트 스위칭은 스레드에서도 일어난다. 스레드는 스택 영역을 제외한 모든 메모리를 공유하기 때문에 스레드 컨텍스트 스위칭의 경우 비용이 더 적고 시간도 더 적게 걸린다.

 

 


https://korsiy.tistory.com/5

 

3주차 과제 제출

1.     프로세서란 무엇인지 충분하게 설명하세요. 1)    프로세서의 개념 병행 실행하는 프로그램들은 컴퓨터 자원을 공유함으로 인한 이를 제어하는 방법의 필요성으로 등장 2)    프로세

korsiy.tistory.com

https://velog.io/@narangke3/%EC%BB%B4%ED%8C%8C%EC%9D%BC-%EA%B3%BC%EC%A0%95

 

컴파일 과정

프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미하며 '컴파일 과정'이란 다음과 같습니다.이는 별도의 컴파일 과

velog.io

https://velog.io/@narangke3/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C

 

프로세스 상태

프로세스(process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 cpu스케줄링의 대상이 되는 작업(task)와 거의 같은 의미로 쓰입니다.프로세스의 상태는 여러가지 상태 값을 가집니다.프로세스

velog.io

https://slidesplayer.org/slide/15694233/

 

5 프로세스 정보. - ppt download

학습목표 유닉스 시스템에서 프로세스가 무엇인지 이해한다. 함수를 사용해 프로세스의 속성을 검색할 수 있다. 프로세스의 실행시간을 측정할 수 있다. 환경변수를 설정하고 사용할 수 있다.

slidesplayer.org

https://www.crocus.co.kr/1364

 

컨택스트 스위칭(Context Switching)

컨택스트 스위칭(Context Switching)이란? 위의 그림을 통해 설명하고자 한다. 프로세스 P0와 P1이 존재할 때, P0가 CPU를 점유중(excuting)이었고 P1이 대기중(idle)이었는 상태이다가 얼마후에는 P1이 실행

www.crocus.co.kr

https://nostressdev.tistory.com/16

 

Process state, 프로세스의 상태

앞서 살펴본 PCB 에 저장된 정보 중, Process State 에 관한 정보가 있었다. 프로세스의 상태란, 정확히 어떤 것을 표현할까? 다음은 프로세스 상태 전이의 도식화이다. 한 눈에 들어오는 구조는 아닌

nostressdev.tistory.com

https://luyin.tistory.com/201

 

정적 라이브러리(Static library) vs 동적 라이브러리(Dynamic library)

1. Static library Dynamic (linking) library (흔히 얘기하는 DLL)을 설명하기 위해 간단하게 정리한다. 특정 기능의 라이브러리를 static 하게 제작한다는 것은 link 단계에서 라이브러리(*.lib 파일)를 실행 바..

luyin.tistory.com

https://jaeyung1001.tistory.com/4

 

정적/동적 라이브러리 차이점

예전에 면접 질문보면서 공부했던건데 사소한데도 불구하고 이해를 못해서 적어본다 정적 라이브러리는 컴파일시 실행파일에 포함되며, 동적 라이브러리는 실행시 실행파일에 포함된다. 예를

jaeyung1001.tistory.com

https://hsunnystory.tistory.com/109

 

정적 라이브러리(lib) vs 동적 라이브러리(dll)

정적링크라이브러리(Static Link Library) - .lib  컴파일 시에 함수가 실행파일에 연결된다. 실행 파일에 함수의 코드가 복사되기 때문에 실행파일의 크기가 커지는 단점이 있지만 실행 파일은 완전

hsunnystory.tistory.com

https://sublivan.tistory.com/6

 

C - 컴파일 과정(전처리, 컴파일, 어셈블, 링크)

gcc를 통해 c 언어로 작성된 코드가 컴파일되는 과정을 알아보자. 대략 우리가 코드를 짰다고 하자. 그럼 그게 소스파일이다. Source.cpp (이름.cpp)이렇게 저장되는 파일! 소스파일은 C언어나 java 등,

sublivan.tistory.com

https://velog.io/@cchloe2311/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0

 

[운영체제] 프로세스 메모리 구조

시스템은 프로그램을 실행할 때 해당 프로그램을 메모리에 로드합니다. 그 메모리 구조에 대해 알아보겠습니다!실행되고 있는 프로그램으로, 프로세스는 각 메모리 공간을 시스템으로부터 할

velog.io

https://zangzangs.tistory.com/107

 

[OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙)

프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) 프로그램의 실행 프로그램의 실행은 두가지 중요한 의미를 가진다. 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미 프로그램이 CP

zangzangs.tistory.com

https://jwprogramming.tistory.com/16

 

PCB(Process Control Block)란?

OS의 기본. Process Control Block(PCB)입니다. - 프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조입니다. PCB는 운..

jwprogramming.tistory.com