티스토리 뷰
파일 생성후 실행파일까지의 과정
컴파일
-컴파일은 소스코드를 컴퓨터가 이해하는 바이너리 코드로 변환하는 과정을 컴파일이라고 하는데. 컴파일러는 소스코드를 입력으로 받아서 이를 실행 가능한 목적코드로 변환한후 링크를 통해 실행가능한 파일을 만듭니다.
과정 | 과정 설명 |
전처리(Preprocessing) 단계 | 소스코드 내의 전처리 지시문을 처리하는 과정, 컴파일을 하기전에 먼저 전처리 지시문을 해석해 그 지시문의 코드들을 현재 소스 파일에 포함을 시킴.(.i 파일로 변환) |
컴파일(Compilation) 단계 | 앞에서 전처리된 소스코드를 컴파일러가 입력으로 받아서, 컴퓨터가 이해할 수 있는 어셈블리어로 변환.(.s 파일로 변환) |
어셈블(Assembly) 단계 | 어셈블러가 앞의 어셈블리어를 받아서 기계어 목적(binery)파일로 변환하며, 프로세스로 변환되기 위한 정보가 삽입 됨.(.o파일로변환) |
링킹
-여러개의 오브젝트 파일에 있는 코드와 데이터를 모아서 연결하여 실행파일을 만드는 링킹(Linking)이란 작업을 하는 것입니다. 이것으로 인해 한개의 소스파일로 구성한 후 별도로 수정을 할 수 있고 더 세분화하여 개발이 가능해졌으며. 링커는 보통 오브젝트 파일에서 참조하는 함수,변수유무를 확인하고 여러 파일의 코드와 데이터섹션을 하나로 합쳐 하나의 Executable(exe 파일) 파일로 만듭니다.
로딩
로더(Loader)가 프로그램 실행 파일을 메모리에 적재하고 실행하는 과정을 진행합니다. 크게 6가지의 과정을 거치며 이 과정을 거쳐 실행파일을 메모리에 할당하고 실행합니다.
- 메모리 할당
-로더가 실행파일의 크기를 파악해 메모리공간을 할당합니다. 할당된 메모리 공간은 코드,데이터,스택..등의 영역으로 나누어집니다. - 코드 적재
-디스크에 있는 실행 파일 이미지를 메모리에 적재합니다. 코드영역에 메모리 주소를 할당하고, 코드를 적재합니다. - 주소 바인딩
-실행 파일 이미지 내의 심볼과 메모리 주소를 실제주소로 바인딩합니다. 이과정에서 로더가 실행파일의 데이터구조를 식별하고 파악합니다.
즉, 디스크에 맞춰져 있는 다양한 심볼들의 주소를 메모리구조에 맞게 재배치하는 과정입니다. - 데이터 초기화
-실행 파일의 데이터부분을 메모리에 적재 후 초기화합니다. 데이터 영역에 메모리 주소를 할당하고, 코드를 적재합니다. - 스택 초기화
-실행 파일의 스택부분을 메모리에 적재 후 초기화합니다. 스택 영역에 메모리 주소를 할당하고 코드를 적재합니다. - 실행
-프로그램의 시작지점을 찾아 실행합니다. 이과정에서는 pc값(프로그램 카운터)를 시작지점으로 설정한 후 프로그램을 실행합니다.
Runtime System
-프로그램이 싱행되는 동안 그 프로그램을 지원하고 관리하는 여러 기능과 서비스를 제공하는 소프트웨어 레이어를 지칭하는 시스템입니다.
즉, Runtime System도 소프트웨어중 하나이며, 실행중인 프로그램과 함께 메모리에 로드되어 같이 실행됩니다
프로세스 생명주기
- New(생성)
-프로세스가 생성되기 시작하는 상태로, 프로세스의 초기 정보가 시스템에 성정되며 준비 상태로 전환되기위한 준비가 이루어집니다. - Ready(준비)
-프로세스가 CPU의실행을 기다리는 상태입니다. 여기서 프로세스는 실행 대기열에 있으며 스케줄링 알고리즘에 따라 다음으로 Running될 프로세스를 선택합니다. - Running(실행)
-프로세스가 현재 CPU에서 실행되고 있는 상태입니다. 프로세스는 실행을 계속하거나, I/O 작업요청, 타이머 만료등의 이유로 다른 상태로 전환될 수 있습니다.
타이머 만료시에는 다시 Ready상태로 전환되며, I/O 작업요청시에는 Waiting상태로 전환됩니다. - Waiting(대기)
-프로세스가 특정 이벤트나 조건을 기다리는 상태입니다. 이벤트가 발생하면 프로세스는 다시 Ready상태로 돌아갑니다. - Terminated(종료)
-프로세스가 실행을 완료하고 종료된 상태입니다. 이 상태에서 프로세스는 시스템 리소스를 반환하며, 프로세스 테이블에서 제거될 준비를 합니다.
Process Control Block(PCB)
-운영체제에서 프로세스의 중요한 정보를 저장하는 자료구조로, 운영체제에서 PCB를 사용하여 프로세스 관리와 실행을 효율적으로 수행합니다. PCB는 각 시스템에서 프로세스마다 하나씩 존재합니다.
Context Switch(문맥 전환)
운영체제의 스케줄러가 한 프로세스의 실행을 중지하고 다른 프로세스의 실행을 시작할 때 발생하는 과정을 말하며, 이렇게 프로세스가 중지되고 실행되는 Context Switch과정에서는 CPU가 다른일을 못하게 됩니다.
따라서, 이 과정에서 생기는 오버헤드를 적게 발생시키기위해 최대한 Context Switch과정을 최소화 하여야 합니다.
- CISC
- 복잡한 명령어 셋 구성으로 효율이 높아 Context Switch의 오버헤드가 적음.
- 복잡한 회로로, 물리 공간 차지가 심해 레지스터 용량이 저하됨. - RISC
- 간단한 명령어 셋 구성으로 클럭속도가 높아 수행 속도가 빠름
- 간단한 회로로 절약된 물리 공간에 레지스터가 많아, Context Switch의 오버헤드가 많음.
'OS' 카테고리의 다른 글
Copy-on-Write (mmap) (0) | 2023.05.08 |
---|---|
가상 메모리(Virtual Memory) (0) | 2023.05.05 |
파일모드란? (0) | 2023.04.06 |
LR 파싱 과정 (0) | 2023.04.04 |
cpu 명령어 모음 (0) | 2023.03.30 |
- Total
- Today
- Yesterday
- nat
- sql
- DB
- 프로토콜
- 쿼리
- 문법
- 포트포워딩
- 파인튜닝
- 테이블
- 컴퓨터구조
- 깃허브
- 배포
- 자바
- 소프트웨어공학
- 네트워크
- 서버
- 클라우드
- JPA
- IP주소
- 보안
- 인공지능
- 컨테이너
- 스프링
- 메세지큐
- 깃
- 자동화
- 웹소켓
- 도커
- 데이터
- 데이터베이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |