CS 정리 - 8

유호준·2023년 5월 17일
0

CS 정리

목록 보기
4/12

TLB는 무엇인가요?

  • 페이지 테이블은 메인 메모리에 존재해서 CPU는 메인메모리에 최소 2번은 접근해야 원하는 데이터를 얻을 수 있다.
    1. 페이지 테이블에 접근
    1. 해당 정보를 기반으로 실제 메모리에 접근
  • TLB(Translation Lookaside Buffer, 페이지 정보 캐쉬)
    - 가상 메모리 주소를 물리적 주소로 변환하는 속도를 높이기 위해 사용하는 캐시
    • CPU가 가상 주소로 메모리에 접근하려고 할 때 우선 TLB에 접근, 없다면 페이지 테이블에서 찾아 접근
    • 굉장히 작음 : 64~1024 entry
    • MMU에 별도의 칩으로 있음

TLB를 쓰면 왜 빨라지나요?

  • 메모리에 접근하는 것이 아니라 MMU 내부에서 물리주소를 얻을 수 있기 때문에 빨라진다.

MMU가 무엇인가요?

  • MMU란 논리 메모리 주소를 물리 메모리 주소로 매핑시켜주는 역할을 수행하는 하드웨어이다.
  • 주소 변환 뿐이 아니라 잘못된 주소에 접근하지 않도록 보호하는 역할도 수행한다.

TLB와 MMU는 어디에 위치해 있나요?

CPU에 탑재

동기화를 구현하기 위한 하드웨어적인 해결 방법에 대해 설명해 주세요.

메모리 장벽

메모리 모델 : 컴퓨터 아키텍처가 응용프로그램에게 메모리를 어떻게 제공하는가에 대한 모델

  • 강한 순서: 한 프로세서의 메모리 변경 결과가 다른 모든 프로세서에 바로 보인다.
  • 약한 순서 : 한 프로세서의 메모리 변경 결과가 다른 프로세서에 즉시 보이지 않는다.

컴퓨터 아키텍처는 메모리의 모든 변경사항을 다른 모든 프로세서로 전파하는 명령어 제공

  • 다른 프로세서에서 실행중인 스레드에 메모리 변경 사항이 보이는 것을 보장함
  1. Load barrier : 메모리에서 데이터를 읽어오는 명령어 다음에 실행되는 명령어들을 지연
    • 데이터 읽기가 완료되기 전에 실행된 명령어로부터 발생하는 문제 해결
  2. Store barrier : 메모리에 데이터를 쓰는 명령어 이전에 실행되는 명령어들을 지연
    • 데이터 쓰기가 완료되기 전에 실행된 명령어로부터 발생하는 문제 해결
  • 메모리 베리어 없이는 원자적 연산이 제대로 작동안할 수도 있다.

Hardware instructions, 하드웨어 명령어

  • 한 워드의 내용을 원자적으로 검사하고 변경하거나, 두 워드의 내용을 원자적으로 교환할 수 있는 명령어
  • test_and_set()
    - lock이 가능한지 현재 lock 상태를 반환하고 lock을 true로 설정
    • 예) 두 프로세스를 동시 실행할 때
      • 처음 실행하는 프로세스는 lock = false이므로 임계구역에 진입
      • 임계구역에서 진입하면서 lock = true
      • 두 번째 프로세스는 lock = true라서 임계구역 진입 불가
  • compare_and_swap()
    - 두 워드의 내용 교환에 기반을 둔 두 개의 워드에 대한 원자적인 연산 수행
    	```c
    int compare_and_swap(int value, int expected, int new_value){
    int tmp =
    value;
    if (value == expected)
    value = new_value;
    return tmp;
    }
    		- lock의 초기값은 0
    - 여러 프로세스가 동시에 실행될 때
    	- 첫 프로세스는 lock = 0 이므로 입계구역에 진입 가능
        - 임계 구역에 진입하면서 lock=1로 바꿈
        - 나머지 프로세스는 lock이 1이라 임계구역에 진입 불가
        

volatile 키워드는 어떤 의미가 있나요?

  • 자바 코드의 변수를 메인 메모리에 저장할 것을 명시하기 위해 쓰인다.
  • CPU 캐시가 쓰이지 않는다.
  • 최적화 대상이 아니다.
  • Java 5 Happens-Before 보장
    - 한 스레드가 volatile 변수를 수정할 때, 이 스레드가 volatile 변수를 수정하기 전에 수정한 모든 변수들이 함께 메모리에 저장됨
    • 한 스레드가 volatile 변수를 메인 메모리에서 읽어들일 때, volatile 변수를 수정하면서 메인 메모레에 함께 저장된 다른 모든 변수들도 함께 읽여들여짐

싱글 코어가 아니라 멀티코어라면 어떻게 동기화가 이뤄질까요?

  • lock
  • 원자적 연산
  • 메모리 베리어

페이지 교체 알고리즘에 대해 설명해 주세요.

FIFO

  • 가장 먼저 메모리에 올라온 페이지를 가장 먼저 내보내기
  • 성능은 좋지 않음

OPT 알고리즘

  • 앞으로 오랫동안 사용하지 않을 페이지를 교체하는 알고리즘
  • 프로세스가 앞으로 사용할 페이지를 미리 알아야 하기 때문에 실제로 구현하기는 거의 불가능이다.

LRU 알고리즘

  • 가장 오랫동안 사용하지 않은 페이지를 교체하는 알고리즘
  • 성능이 좋은 편
  • 프로세스가 메모리에 접근할 때마다 참조된 페이지 시간을 기록해야한다.

LFU

  • 참조횟수가 가장 적은 페이지를 교체하는 알고리즘
  • 교체 대상이 여러개라면 가장 오랫됭안 사용하지 않은 페이지 교체
  • 참조횟수를 통해 장기적 시간 규모에서의 참조 성향 고려

LRU 알고리즘은 어떤 특성을 이용한 알고리즘이라고 할 수 있을까요?

  • 시간 지역성 : 최근에 참조된 페이지가 가까운 미래에 다시 참조될 가능성이 높다.

LRU 알고리즘을 구현한다면, 어떻게 구현할 수 있을까요?

  • 양방향 리스트

File Descriptor와 File System에 에 대해 설명해 주세요.

File Descriptor

  • 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값
  • 유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념

동작 과정

  1. 프로세스가 실행 중에 파일을 열면 커널은 해당 프로세스의 file descriptor 숫자 중에 사용하지 않는 가장 작은 값을 할당해줌
    2.프로세스가 열려있는 파일에 시스템 콜을 이용해 접근할 때, file descriptor 값을 이용해 파일을 지칭할 수 있음

File System

  • 컴퓨터에서 파일/자료를 쉽게 찾을 수 있도록 유지/관리하는 방법
  • 커널영역에서 동작

i-Node가 무엇인가요

  • 리눅스에서 파일 시스템을 관리하기 위해 사용되는 개체의 일종으로 파일의 정보를 가진다.
  • 모든 파일은 각자 1개의 i-Node를 가지고 있는다
  • 파일 타입, 소유자, 소유 그룹 등의 정보를 가지고 있다.
  • 블럭 포인터가 파일의 블록의 주소를 가지고 있다.
  • 만약 블럭 포인터의 개수에 비해 파일이 크다면 다른 i-node를 가리키게 하여 이를 관리한다 -> indirect-pointer

동기와 비동기, 블로킹과 논블로킹의 차이에 대해 설명해 주세요.

동기

  • 호출되는 함수가 종료될 때까지 상태를 계속 확인함

비동기

  • 호출되는 함수가 종료되는지 신경쓰지 않음

블로킹

  • 호출된 함수에 대해 제어권을 넘겨줌

논블로킹

  • 함수를 호출해도 계속 제어권을 가지고 있음

그렇다면, 동기이면서 논블로킹이고, 비동기이면서 블로킹인 경우는 의미가 있다고 할 수 있나요?

동기이면서 논 블로킹

  • 다른 작업과의 동기를 위해 계속 상태를 조회하면서 나의 작업을 처리할 필요가 있을 때 의미가 있음

비동기면서 블로킹

  • 의미없음

I/O 멀티플렉싱에 대해 설명해 주세요.

멀티플렉싱 : 효율성을 높이기 위해 물리적 장치를 최소한으로 사용하여 최대한의 데이터를 전송하는 기술

동기-블로킹

  • 프로세스는 입출력을 요청하는 함수를 호출한 뒤 블라킹
  • 프로세스는 이 동안 커널의 응답만 기다리는 상태
  • 요청 수가 많아지면 한 작업당 한번의 컨텍스트 스위치 발생으로 인해 성능 저하

동기-논블로킹

  • 입출력 요청을 했을 떄 데이터가 없다면 -1 반환, 실패 유형은 errno로 구분
  • 프로세스가 원하는 결과를 받을 때 까지 계속 상태를 체크해야한다.

I/O 멀티 플랙싱 : 동기 모델은 요청한 순서대로 작업을 완료시키기 때문에 2개 이상의 파일을 동시에 처리하기 힘들어 성능을 위해서는 멀티 프로세스/멀티 스레드로 동작해야한다.

비동기-블로킹

  • 한 프로세스가 여러 파일을 관리
  • select
    - 대상 FD를 배열에 저장하고 하나하나 순차검색한다.
  • 동작 과정
    1. FD 설정, 검사의 범위 지정, 타임아웃 설정
    1. select 함수 호출
    2. 호출 결과 확인
profile
포트폴리오 - https://drive.google.com/file/d/152OM9p7JQorjUfvR4BaxqGuP5xtQ8-fM/view?usp=sharing

0개의 댓글