CS

[면접을 위한 CS 전공지식 노트] 3.3. 프로세스와 스레드(1)

yes_truly 2024. 3. 15. 22:02
728x90

 


 

🔑 프로세스와 스레드

  • 프로세스(process)
    • CPU 스케줄링 대상인 작업(task)와 거의 같은 의미로 사용
    • 컴퓨터에서 실행되고 있는 프로그램
    • 프로그램이 메모리에 올라가 인스턴스화 된 것
  • 스레드(thread)
    • 프로세스 내 작업흐름
    • 프로그램이 메모리에 올라가면 프로세사기 되는 인스턴스화를 거치고 운영체제의 CPU스케줄러에 따라 CPU가 프로세스 실행됨

 


 

🔑 프로세스와 컴파일 과정

  • 프로그램 컴파일 과정
    • 전처리 : 소스코드 주석 제거, 헤더 파일 병합, 매크로 치환
    • 컴파일러 : 오류 처리, 코드 최적화 작업, 어셈블리어로 변환
    • 어셈블러 : 어셈블리어를 목적 코드로 변환, 확장자는 운영체제마다 다름
    • 링커
      • 프로그램 내에 있는 라이브러리 함수나 다른 파일들과 목적 코드를 결합해 실행 파일을 만듦
        • 정적 라이브러리
          • 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식으로 라이브러리 사용
          • 외부 의존도가 낮고 코드 중복 등 메모리 효율성이 낮음
        • 동적 라이브러리
          • 프로그램 실행 시 필요할 때만 DLL이라는 함수 정보를 통해 참조해 라이브러리 사용
          • 메모리 효율성이 높고 외부 의존도가 높음

 


 

🔑 프로세스의 상태

  • 생성 상태(create)
    • 프로세스가 생성된 상태로  PCB가 할당됨. fork()나 exec()함수 사용
      • fork()
        • 부모 프로세스의 주소 공간을 그대로 복사하고 새로운 자식 프로세스를 생성하는 함수
        • 부모 프로세스의 비동기 작업 등을 상속하지 않음
      • exec()
        • 새롭게 프로세스를 생성하는 함수
  • 대기 상태(ready)
    • 메모리 공간이 충분하면 메모리를 할당받고, 아닐 경우에는 아닌 상태로 대기하고 있음
    • CPU 스케줄러로부터 CPU소유권이 넘어오기를 기다리는 상태
  • 대기 중단 상태(ready suspended) : 메모리 부족ㅇ로 인한 일시 중단
  • 실행 상태(running)
    • CPU소유권과 메모리를 할당받고 인스트럭션을 수행 중인 상태
    • CPU burst가 일어났다고 하기도 함
  • 중단상태(blocked)
    • 어떤 이벤트가 발생한 후 기다리며 프로세스가 차단된 상태
    • I/O 디바이스에 의한 인터럽트로 많이 발생됨
  • 일시 중단 상태(blocked suspended)
    • 대기 중단과 유사
    • 중단된 상태에서 프로세스가 실행되려 했으나 메모리 부족으로 일시중단된 상태
  • 종료 상태(terminated)
    • 메모리와 CPU 소유권 모두를 놓고 가는 상태
    • 자연스러운 종료와 부모 프로세스가 자식 프로세스를 강제로 종료시키는 비자발적 종료(abort)가 있음

 


 

🔑 프로세스의 메모리 구조

  • 동적 영역 - 스택과 힙
    • 동적 할당 : 런타임 단계에서 메모리를 할당받음
    • 스택
      • 지역변수, 매개변수, 실행되는 함수에 의해 늘어나거나 줄어드는 메모리 영역
      • 함수 호출 시 마다 호출될 때의 환경 등 특정 정보 스택에 계속해서 저장됨
      • 재귀함수 호출 시 새로운 스택 프레임이 매번 사용되어 함수 내 변수 집합이 해당 함수의 다른 인스턴스 변수를 방해하지 못함
      • 후입선출 방식(Last In First Out, LIFO)
      • 동적으로 할당되는 변수를 담음
      • malloc(), free()함수를 통해 관리할 수 있고 동적으로 관리되는 자료 구조의 경우 힙 영역을 사용함
      • 선입선출 방식(First In First Out, FIFO)
  • 정적 영역 - 데이터와 코드
    • 정적 할당 : 컴파일 단계에서 메모리를 할당하는 것
    • 데이터 영역
      • BSS Segment
        • 전역 변수 또는 static, const로 선언되어있음
        • 0으로 초기화 또는 초기화가 어떤 값들로도 되어있지 않은 변수들이 할당됨
      • Data Segemt
        • 전역변수 또는 static, const로 선언되어있는 것 중 0이 아닌 값으로 초기와된 변수가 할당됨
    • 코드 영역 : 프로그램의 코드가 들어감
728x90