운영체제 (7) - 프로그램, 프로세스

@JHSHIN·2023년 3월 29일
0
post-thumbnail

운영체제 수업을 수강하며 정리한 내용을 작성하려고 합니다.

프로그램이 만들어지는 과정

  • Source code (.c files)
    • 프로그램이 수행하고자 하는 작업이 프로그래밍 언어로 표현
  • Object file (.o file)
    • 컴퓨터가 이해할 수 있는 기계어로 구성된 파일, 자체로는 실행 불가.
    • Relocatable addresses (relative addresses)로 표현
      • 심볼들의 주소가 상대적인 값으로 표현
      • e.g., 처음 주소로부터 15 byte 떨어진 지점
    • 소스 코드 하나 당 object file 하나
  • Executable (.exe file)
    • 특정한 환경(OS)에서 수행될 수 있는 하나의 실행 파일
    • 프로세스로의 변환을 위한 header, 작업 내용인 text, 필요한 데이터인 data를 포함
    • 절대 주소로 표현
      • 심볼들의 주소가 절대값으로 표현 (e.g., 0x0100 3F0A)
    • persistent(실행 파일) vs non-persistent(프로세스)
  • 컴파일러/링커: OS와 CPU에 따라 다른 형태의 파일을 생성
    • 링커는 라이브러리를 어떻게 executable에 엮을까?

Linking: static vs dynamic

  • Linker가 라이브러리를 로드하는 방식
    • Static linking
      • 프로그램에 사용할 라이브러리를 컴파일 타임에 전부 복사하는 방식
      • 단점: 여러 소스 코드에서 같은 라이브러리를 사용한다면?
    • Dynamic linking
      • 라이브러리가 별도로 존재하며, 런타임에 라이브러리와 연결하는 방식
      • 단점: 로드하는 시간이 길어짐

Static linking vs Dynamic linking

  • Dynamic linking의 장점

    • Executable 하나의 크기가 작아짐
    • 동일한 라이브러리 코드를 공유하므로, 메모리와 저장공간 낭비가 적음
  • Dynamic linking의 단점

    • Executable의 로딩 타임이 길다
    • 이식성 문제 - 다른 기기에서 실행 시 라이브러리가 존재해야 하고, 새로 컴파일해야 한다
  • Executable 크기

Static이 2배 ~ 6배가량 크다

  • Loading time

Process의 정의

💡 Process란, 실행 중인 프로그램을 의미한다.

Abstracion이 필요한 이유

  • Resource sharing
    • CPU, 메모리 등 자원을 공유(스케줄링)하기 위한 단위
    • 각 프로세스 입장에서는 CPU 등 자원을 독점 사용하는 것으로 간주
  • Protection domain

    상호 침범을 막는다.

Process의 자원 및 생성

  • 프로세스에 할당된 자원과 Abstraction
    • 메모리: (virtual) Address space
    • 스토리지: (opened) files
    • 네트워크: (opened) sockets
profile
더 나은 UX에 계속해서 도전하며 성장하는 개발자

0개의 댓글