Post

[운영체제] 컴퓨터 요소와 메모리

본 게시글은 [면접을 위한 CS 전공지식 노트]를 기반으로 개인 학습 내용을 정리한 글입니다.

프로세스와 스레드

프로세스 : 컴퓨터에서 실행되고 있는 프로그램, = CPU 스케줄링의 대상이 되는 작업(task)
스레드 : 프로세스 내 작업의 흐름
CPU 스케줄러에 따라 CPU가 프로세스 실행

프로세스와 컴파일 과정

프로세스 : 프로그램이 메모리에 올라가 인스턴스화

컴파일 과정

전처리 : 소스코드의 주석 제거, 헤더 파일을 병합해 매크로를 치환
컴파일러 : 오류처리, 코드 최적화 작업을 해 어셈블리어로 변환
어셈블러 : 목적 코드(object code)로 변환 (리눅스 : .o)
링커 : 프로그램 내의 라이브러리 함수/다른 파일들과 목적코드를 결합해 실행파일 만듦 (.exe/.out 확장자)

프로세스의 상태

Image

생성상태(create)

프로세스가 생성된 상태

  • fork() or exec()함수를 통해 생성
    • fork() : 부모 프로세스의 주소공간을 그대로 복사, 새로운 자식 프로세스 생성(부모프로세스의 비동기 작업 등을 상속하지 않음)
    • exec() : 새롭게 프로세스를 생성하는 함수
  • PCB 할당됨

대기상태(ready)

프로세스가 메모리 위에 있고, CPU 차례만 기다리는 상태

대기 중단 상태(suspended ready)

프로세스가 대기상태에 있다가, 메모리 부족 등으로 디스크로 내려간 상태

실행 상태(running)

프로세스가 메모리 위에 있고, CPU에서 실제로 실행 중인 상태

중단 상태(blocked)

프로세스가 메모리 위에 있고, I/O 완료 같은 외부 이벤트를 기다리는 상태
I/O디바이스에 의한 인터럽트로 많이 발생함

일시 중단 상태(blocked suspended)

프로세스가 중단상태였다가, 메모리 부족 등으로 디스크로 내려간 상태

종료 상태(terminated)

메모리와 CPU 소유권을 모두 놓고 가는 상태

  • 자연스럽게 종료되는 것
  • 부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료(abort)
    • 자식 프로세스에 할당된 자원의 한계치를 넘어서거나 부모 프로세스가 종료되거나 사용자가 process, kill 등 여러 명령어로 프로세스를 종료할 때 발생

프로세스의 메모리 구조

  • 동적 영역
    • 스택
  • 정적 영역
    • 데이터 영역
      • BSS segment
      • DATA segment
    • 코드 영역

스택과 힙

| 구분 | 스택(Stack) | 힙(Heap) | | —— | ————— | ————– | | 관리 주체 | 컴파일러/운영체제 자동 관리 | 프로그래머가 직접 관리 | | 데이터 크기 | 컴파일 시 고정 | 런타임에 가변적 | | 속도 | 빠름 | 상대적으로 느림 | | 주요 용도 | 함수 호출, 지역 변수 | 동적 메모리, 객체, 배열 | | 오류 위험 | 스택 오버플로우 | 메모리 누수, 해제 오류 |

데이터 영역과 코드 영역

https://m.blog.naver.com/techref/222270185816

This post is licensed under CC BY 4.0 by the author.