[CS] 가상 메모리, 페이지 교체, 프로세스 VS 스레드, 컴파일 과정

최지나·2023년 12월 18일
2

CS

목록 보기
48/55

가상 메모리

1. 가상 메모리

Virtual Memory, 컴퓨터의 실제 메모리보다 더 큰 메모리 공간을 사용자에게 제공하기 위한 기술

  • 가상 주소는 메모리 관리 장치(MMU)와 페이지 테이블을 통해 실제 주소로 변환된다
  • 용어 정리 : 페이지 = 가상 메모리 최소 크기 단위, 프레임 = 실제 디스크나 메모리를 사용하는 최소 크기 단위

2. 페이지 테이블과 TLB

  • 페이지 테이블은 가상 주소와 실제 주소를 매핑
  • TLB(Transaction Lookaside Buffer)은 페이지 테이블 접근 속도를 향상시키기 위한 캐싱 계층 (가장 주소에서 바로 page table로 가는 것이 아니라 TLB에 있는지 확인하고, 만약 없다면 page table로 가서 실제 주소를 가져옴)

3. 페이지 폴트와 스와핑

  • 필요한 데이터가 실제 메모리에 없을 때 발생(가상 메모리에는 존재하지만 실제 메모리인 RAM에는 없음) => 페이지 폴트
  • 스와핑을 통해 사용하지 않는 메모리 영역을 디스크로 옮기고, 필요한 데이터를 디스크에서 메모리로 가져옴

4. 스레싱

  • 너무 많은 프로세스가 메모리에 동시 적재되어 스와핑이 과도하게 발생
  • CPU 이용률을 낮추고 시스템 성능이 저하
  • 해결?
    • 하드웨어: 메모리 늘리거나 HDD -> SSD
    • 소프트웨어: 작업세트(프로세스의 과거 사용 이력을 기반으로 많이 사용하는 페이지 집합을 만들어 한꺼번에 메모리로 로드), PFF(page fault frequency, 페이지 폴트 빈도를 조절하는 방식으로 상한선에 도달 시 프레임을 늘리고, 하한선에 도달 시 프레임 감소시킴)

5. 가상 메모리의 필요성

  • 주기억장치를 효율적으로 관리하고, 메모리 관리를 단순화
  • 메모리 용량 안정성을 보장하여 프로세스 간 메모리 충돌 방지

페이지 교체

메모리 관리 효율성을 높이고, 스와핑으로 인한 성능 저하를 최소화하는데 중요한 역할

1. 오프라인 알고리즘(LFD, Longest Foward Distance)

  • 이상적인 알고리즘으로, 가장 먼 미래에 사용될 페이지를 교체
  • 실제 구현은 불가능하지만, 다른 알고리즘의 성능 비교 기준으로 사용

2. FIFO(First In First Out)

  • 가장 먼저 메모리에 올라온 페이지를 교체
  • 간단하지만, 자주 사용되는 페이지를 교체할 수 있다는 단점 존재

3. LRU(Least Recently Used)

  • 가장 오랫동안 사용되지 않은 페이지를 교체
  • 페이지 사용 이력을 추적해야 하며, 이로 인한 오버헤드 발생 가능

4. NUR(Not Used Recently) 또는 NRU

  • 각 페이지에 참조 비트를 할당하고, 최근에 사용되지 않은 페이지를 교체
  • 참조 비트가 0인 페이지를 찾아 교체하고, 한바퀴 도는 동안 참조되지 않으면 참조 1->0이 된다

5. LFU(Least Frequently Used)

  • 가장 적게 참조된 페이지를 교체
  • 참조 횟수를 추적해야 하며, 이는 오버헤드 발생 가능

프로세스 VS 스레드

1. 프로세스 (process)

  • 실행 중인 프로그램으로, 컴퓨터 메모리에 적재되어 독립적으로 실행
  • 싱글 스레드 프로세스(하나의 스레드를 가짐)과 멀티 스레드 프로세스(여러 스레드를 가짐)으로 나뉨

2. 스레드

  • 프로세스 내에서 실행되는 작업의 흐름
  • 프로세스의 코드, 데이터, 힙 영역을 공유하지만, 각각의 스레드는 자신만의 스택 영역을 가짐

3. 프로세스와 스레드의 주요 차이점

  • 메모리 공유: 스레드는 프로세스 내의 메모리(스택 제외)를 공유하기 때문에 효율적
  • 통신: 스레드간 통신은 IPC를 사용하지 않아도 되기에 빠르고 간단
  • 격리 및 영향: 프로세스는 독립적으로 작동하지만, 스레드는 한 스레드의 문제가 다른 스레드에 영향을 줄 수 있음
  • 생성 및 종료: 스레드는 프로세스보다 생성 및 종료가 더 빠르고 자원 소모가 적음

프로그램의 컴파일 과정

컴파일 = 고급 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정. 4단계로 구성

1. 전처리

  • 주석 제거, 헤더 파일 병합

2. 컴파일

  • 소스코드 오류 검사, 최적화하여 어셈블리어로 변환

3. 어셈블

어셈블리어를 목적코드 (object code)로 변환

4. 링킹

  • 외부 라이브러리 함수와 목적 코드를 병합하여 실행 가능한 파일 (.exe,.out)을 생성

Java의 컴파일 과정

1. 컴파일

  • 자바 컴파일러(.javac)는 .java 파일(소스코드)를 컴파일하여 바이트 코드를 포함하는 .class파일 생성

2. 실행

  • 자바 가상 머신(JVM)은 .class파일을 로드하고 바이트 코드를 기계어로 변환하여 실행
    • 한 번 컴파일 된 자바 코드는 어떤 JVM에서든 실행될 수 있음 플랫폼에 독립적

REF

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글