728x90
안녕하세요! 개발감자입니다.
오늘은 CS의 운영체제 중에서도 3.3 프로세스와 스레드에 대해서 정리해보았습니다.
3.3 프로세스와 스레드
프로세스 : 컴퓨터에서 실행되고 있는 프로그램, CPU 스케줄링의 대상이 되는 작업이라는 용어와 비슷함
스레드 : 프로세스 내 작업의 흐름
3.3.1 프로세스와 컴파일 과정
- 프로세스
- 프로그램으로부터 인스턴스화된 것
- 구글 크롬 프로그램(실행파일) 실행 → 프로세스 시작
- 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역 → 실행할 수 잇는 파일이 되는 것
- 프로그램 : C언어 기반의 프로그램 (컴파일 과정 없이 한 줄 씩 읽어들이는 프로그램과는 다름)
- 전처리
- 소스코드의 주석을 제거 → #include 등 헤더 파일을 병합 → 매크로 치환
- 컴파일러
- 오류 처리, 코드 최적화 작업
- 어셈블리어로 변환
- 어셈블러
- 어셈블리어 → 목적 코드로 변환
- 확장자 : .o(리눅스)
- 링커
- 프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행파일을 만듦
- 라이브러리의 종류 : 정적 라이브러리, 동적 라이브러리
- 정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행파일에 넣은
- 외부 의존도가 낮고 코드 중복 등 메모리 효율성이 떨어짐
- 동적 라이브러리 : 프로그램 실행 시에 필요할 때만 DLL 이라는 함수 정보를 통해 참조
- 메모리 효율성에서의 장점과 외부 의존도가 높아진다는 단점이 있음
3.3.2 프로세스의 상태
- 생성 상태
- 프로세스가 생성된 상태
- fork(), exec() 함수를 통해 생성
- fork() : 부모 프로세스의 주소 공간을 그대로 복사 → 새로운 자식 프로세스를 생성 (복사만 하고 부모 프로세스의 작업을 상속하지는 않음)
- exec(): 새롭게 프로세스를 생성
- 대기 상태
- 메모리 공간이 충분하면 메모리를 할당
- 메모리 공간이 충분하지 않으면 아닌 상태고 대기 → CPU 소유군이 넘어오기를 기다리는 상태
- 대기 중단 상태
- 메모리 부족으로 일시 중단된 상태
- 실행 상태
- CPU 소유권과 메모리를 할당받고 인스턱션 수행 중인 상태
- 중단 상태
- 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태
- IO 디바이스에 의한 인터럽트로 많이 발생함
- 일시 중단 상태
- 대기 중단과 유사
- 중단된 상태에서 프로세스 실행 시도 ⇒ 메모리 부족으로 일시 중단
- 종료 상태
- 메모리와 CPU 소유권을 모두 놓고 가는 상태
- 자연스럽게 종료 혹은 부모 프로세스가 자식 프로세스 강제 종료시키는 종료 (비자발적 종료도 있음
3.3.3 프로세스의 메모리 구조
운영체제는 프로세스에 적절한 메모리를 할당
동적 영역 : 스택(위 주소부터 할당) , 힙(아래주소부터 할당)
정적 영역 : 데이터 영역, 로드 영역
- 스택
- 지역변수, 매개변수, 함수 저장
- 동적, 컴파일 시에 크기가 결정됨
- 함수가 함수를 재귀적으로 호출 → 동적으로 크기 늘어날 수 있음 → 힙과 스택 사이의 공간을 비워놓음
- 힙
- 동적 할당할 때 사용되며 런타임 시 크기가 결정 됨
- 벡터 같은 동적 배열은 당연히 힙에 동적 할당
- 데이터 영역
- 전역 변수, 정적 변수 저장
- 정적인 특징을 갖는 프로그램 종료 시 사라지는 변수가 들어있는 영역
- BSS 영역과 Data 영역으로 나뉨
- BSS 영역 : 초기화 되지 않은 변수가 0으로 초기화되어 저장
- Data영역 : 0이 아닌 다른 값으로 할당된 변수들이 저장
- 코드 영역
- 프로그램에 내장되어 있는 소스 코드가 들어있는 영역
- 수정 불가능한 기계어로 저장, 동적임
면접을 위한 CS 전공지식 노트 | 주홍철 - 교보문고
면접을 위한 CS 전공지식 노트 | 디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조, 개발자 면접과 포트폴리오까지! CS 전공지식 습득과 면접 대비, 이 책 한 권이면 충분하다! 개발자 면
product.kyobobook.co.kr
이 포스팅은 면접을 위한 CS 전공지식 노트를 기반으로 작성되었습니다.
728x90
반응형
'CS' 카테고리의 다른 글
[CS / 운영체제] 3.4 CPU 스케줄링 알고리즘 (1) | 2024.05.29 |
---|---|
[CS / 운영체제] 3.3 프로세스와 스레드 - 2 (0) | 2024.05.27 |
[CS / 운영체제] 3.2 메모리 (0) | 2024.05.22 |
[CS / 운영체제] 3.1 운영체제와 컴퓨터 (0) | 2024.05.21 |
[CS / 네트워크] 2.5 HTTP (0) | 2024.05.19 |