OS & CS 몇 가지

2025. 3. 21. 20:33·CS

1. PCB


PCB (프로세스 제어 블록)란

  • 빠르게 번갈아 수행되는 프로세스 관리를 위해 사용하는 자료구조
    • 프로세스 관련 정보를 저장하고
    • 프로세스 생성 시 커널 영역에 생성된 후, 프로세스 종료 시 폐기된다.

PCB가 가지는 정보

  • PID (프로세스 ID) : 프로세스 식별 번호
  • 레지스터 값 : 마지막으로 연산한 곳을 기억하기 위한 값
  • 프로세스 상태 : 현재 프로세스의 상태 (입출력 대기, CPU 사용을 위해 대기, CPU 사용 등)
  • CPU 스케줄링 정보 : 할당 순서에 대한 정보
  • 메모리 정보 : 프로세스가 저장된 곳의 정보 (페이지 테이블 정보)
  • 사용한 파일과 입출력 장치 정보 

 

2. 프로세스의 메모리 영역


코드 영역

  • 실행할 수 있는 코드
  • CPU가 실행할 명령어가 담겨있다.
  • 정적 할당 영역

데이터 영역

  • 프로그램이 실행되는 동안 유지할 데이터를 저장하는 영역
  • 정적 할당 영역
  • ex) 전역 변수

힙 영역

  • 프로그래머가 직접 할당할 수 있는 저장공간
    • 할당하면 반환해 주어야 한다.
    • GC
  • 동적 할당 영역
    • 일반적으로 낮은 주소에서 높은 주소로 할당

스택 영역

  • 데이터가 일시적으로 저장되는 공간
  • 함수 호출 시 할당, 반환 시 해제 (컴파일 타임에 크기 결정)
  • 동적 할당 영역
    • 일반적으로 높은 주소에서 낮은 주소로 할당
  • ex) 매개변수, 지역 변수

3. 스레드


스레드란

  • 프로세스를 구성하는 실행 흐름의 단위
  • 스레드의 구성 요소
    • 스레드 ID
    • 레지스터 값
    • 스택 값
    • 실행에 필요한 최소한의 정보 (code, data, files)
  • 프로세스의 종류
    • 단일 스레드 프로세스
    • 멀티 스레드 프로세스

 

멀티 프로세스와 멀티 스레드

  • 멀티 프로세스
    • 동일한 작업을 수행하는 단일 스레드 프로세스를 여러 개 실행
    • 프로세스끼리 자원 공유 불가능
    • 독립적으로 실행
    • IPC : 프로세스 간 통신 (가능은 하지만, 스레드 간 통신보다 복잡, 파일 및 공유 메모리를 통해 수행)
  • 멀티 스레드
    • 하나의 프로세스를 여러 스레드로 실행
    • 스레드 끼리는 같은 프로세스 내 자원 공유 가능
      • 레지스터 값, 스택 값만 고유하게 가짐 (코드, 데이터, 힙, 파일 영역은 공유)
    • 협력과 통신에 유리하지만 하나의 스레드가 문제생기면 전체 프로세스에 문제가 생길 수 있다.

 

 

4. 컴파일러 및 컴파일 과정


컴파일러의 구성 요소

  • 프론트엔드 : 소스코드의 구문 및 의미를 분석하여 변환하는 작업 수행
    • 어휘 분석기 (Lexical Analyzer, Scanner)
      • 소스코드를 토큰 단위로 나누기
      • 불필요한 공백 및 주석 제거
    • 구문 분석기 (Syntax Analyzer, Parser)
      • 토큰을 조합하여 문법 구조 생성
      • 문법 오류 검사 및 파싱 트리 생성
    • 의미 분석기 (Semantic Analyzer)
      • 변수 타입 검사, 범위 검사, 타입 변환 등을 수행
    • 중간 코드 생성기 (Intermediate Code Generator)
      • 중간 코드는 기계어와 소스 코드 사이의 추상적인 표현 형식
  • 미들엔드 : 코드 최적화를 담당하는 단계
    • 중간 코드 최적화 (Optimization)
      • 불필요한 연산 제거, 루프 최적화
      • 데이터 흐름 분석
  • 백엔드 : 최적화된 중간 코드를 기계어로 변환
    • 코드 생성기 (Code Generator)
      • 중간 코드를 실제 CPU에서 실행할 수 있는 기계어로 변환
      • CPU및 OS에 따라 명령어 선택
    • 코드 최적화 (Machine-Specific Optimization)
      • 레지스터 할당
      • 파이프라이닝 및 인라인 함수 최적화

 

C언어 컴파일 과정

  1. 소스 코드 입력
  2. 전처리
    • 전처리기를 통해서 .c 파일을 .i로 변환하는 과정
    • 주석 제거, 헤더파일 삽입, 매크로 및 치환 적용
  3. 컴파일
    • 컴파일러를 통해 전처리된 코드 파일(.i) 를 어셈블리어 파일(.s)로 변환
    • 언어의 문법 검사가 이루어진다.
    • 정적인 역역들의 메모리 할당 수행
  4. 어셈블리
    • 어셈블러를 통해 어셈블리어 파일(.s)를 오브젝트 파일(.o)로 변환하는 과정
    • 오브젝트 파일
      • 오브젝트 코드 (기계어로 변환된 코드)로 구성된 파일
      • 오브젝트 파일 포맷 구조
        • 오브젝트 파일 헤더 : 기초 정보 저장
        • 텍스트 섹션 : 기계어로 변환된 코드 저장
        • 데이터 섹션 : 전역, 정적 변수 포함
        • 심볼 테이블 섹션 : 소스코드에서 참조되는 심볼들의 이름과 주소를 정의 
        • 재배치 정보 섹션 : 링킹 전까지 심볼의 위치를 확정할 수 없기에 정보를 저장하는 부분
        • 디버깅 정보 섹션 : 디버깅에 대한 정보 저장
  5. 링킹
    • 링커를 통해 오브젝트 파일(.o) 들을 묶어서 실행 파일로 만드는 과정
    • 정적 링킹 및 동적 링킹을 통해서 라이브러리를 링크한다.
      • 정적 링킹 : 실행 파일이 라이브러리를 복사해서 가지고 있음
      • 동적 링킹 : 링커가 라이브러리를 가리키는 주소만 가지고 있다가 런타임에 해당 주소로 가서 가져오는 방

출처 : https://velog.io/@zeouscik/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC

 

 

 

 

'CS' 카테고리의 다른 글

온라인 게임과 네트워크 구성  (0) 2025.03.13
네트워크 개념  (0) 2025.03.13
운영체제 몇 가지  (1) 2025.01.13
'CS' 카테고리의 다른 글
  • 온라인 게임과 네트워크 구성
  • 네트워크 개념
  • 운영체제 몇 가지
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    gamestate
    C++
    actor 클래스
    상속
    applydamage
    템플릿
    enhanced input system
    motion matching
    blend pose
    매크로 지정자
    character animation
    addonscreendebugmessage
    additive animation
    DP
    Vector
    map을 vector로 복사
    싱글턴
    cin함수
    BFS
    const
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
OS & CS 몇 가지
상단으로

티스토리툴바