ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영체제 - 2
    CS 2021. 4. 24. 19:01

    다룰 내용

    • 쓰레드
    • 가상 메모리
    • 파일 시스템
    • 부팅, 가상머신 

    스레드

    • Light Weight Process 라고도 함.
    • 프로세스
      • 프로세스 간에는 각 프로세스의 데이터 접근 불가
    • 스레드
      • 하나의 프로세스에 여러개의 스레드 생성 가능
      • 스레드들은 동시에 실행 가능
      • 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능

    • 스레드 장점
        1. 사용자에 대한 응답성 향상
        2. 자원 공유 효율
          • IPC 기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업 필요없음
          • 프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능
        3. 작업이 분리되어 코드가 간결
          • 작성하기 나름
    • 스레드 단점
      • 스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받음
      • 프로세스는 독립적인데 스레드의 경우 데이터를 공유

    스레드 장점
    스레드 단점

    • 스레드 vs 프로세스
      • 프로세스는 독립적, 스레드는 프로세스의 서브셋
      • 프로세스는 각각 독립적인 자원을 가짐, 스레드는 프로세스 자원 공유
      • 프로세스는 자신만의 주소영역을 가짐, 스레드는 주소영역 공유
      • 프로세스간에는 IPC 기법으로 통신해야 함, 스레드는 필요없음

    동기화 (Synchronization) 이슈

    • 동기화: 작업들 사이에 실행 시기를 맞추는 것
    • 여러 스레드가 동일한 자원(데이터) 접근시 동기화 이슈 발생
      • 동일 자원을 여러 스레드가 동시 수정시, 각 스레드 결과에 영향을 줌.
    • 해결 방안
      • Mutual exclusion (상호 배제)
      • 스레드는 프로세스 모든 데이터를 접근할 수 있으므로
        • 여러 스레드가 변경하는 공유 변수에 대해 Exclusive Access 필요
        • 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근하지 못하도록 막기

    동기화 (Synchronization) 와 세마포어

    • Critical Section (임계 구역)에 대한 접근을 막기 위해 LOCKING 메커니즘 필요
      • Mutex (binary semaphore)
        • 임계 구역에 하나의 스레드만 들어갈 수 있음
      • Semaphore
        • 임계 구역에 여러 스레드가 들어갈 수 있음
        • counter를 두어서 동시에 리소스에 접근할 수 있는 스레드 수 제어
    • 세마포어 (Semaphore)
      • P: 검사 (임계영역 들어갈때)
        • S값이 1이상이면 임계영역 진입후 S값 1 차감 (0이면 대기)
      • V: 증가 (임계영역에서 나올때)
        • S값 1더하고, 임계영역을 나옴
      • S: 세마포어값 (초기 값 만큼 여러 프로세스가 동시 임계영역 접근 가능)

    세마포어 계산 슈도코드

    교착상태 (Deadlock)와 기아상태 (Starvation)

    • 무한대기상태: 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태

    스레드 교착상태

    • 교착상태 발생 조건

    • 해결 방법

    • 교착상태 발견 (deadlock detection) 과 회복

    • 기아 상태 (starvation)
    • 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
    • 교착 상태와 기아 상태
      • 교착상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생
      • 기아상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원할당이 안되는 경우를 주로 의미함
    • 기아 상태 해결 방안
      • 우선순위 변경
        • 프로세스 우선순위를 수시로 변경해서, 각 프로세스가 높은 우선수위를 가질 기회주기
        • 오래 기다린 프로세스의 우선순위를 높여주기
        • 우선순위가 아닌, 요청 순서대로 처리하는 FIFO 기반 요청 큐 사용

    가상 메모리

    • 가상 메모리 (Virtual Memory System): 메모리가 실제 메모리보다 많아 보이게 하는 기술
      • 실제 사용하는 메모리는 작다는 점에 착안해서 고안된 기술
      • 프로세스간 공간 분리로, 프로세스 이슈가 전체 시스템에 영향을 주지 않을 수 있음

    가상 메모리가 필요한 이유

    • 하나의 프로세스만 실행 가능한 시스템 (배치 처리 시스템 등)
    1. 프로그램을 메모리에 로드
    2. 프로세스 실행
    3. 프로세스 종료 (메모리 해제)
    • 여러 프로세스 동시 실행 시스템
    1. 메모리 용량 부족 이슈
    2. 프로세스 메모리 영역간에 침범 이슈

    ex) 리눅스는 하나의 프로세스가 4GB
    근데 통상 메모리는 8, 16GB 인데 어떻게 작동하는가 ?

    • 가상 메모리 기본 아이디어
      • 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고/쓸때만 물리 주소로 바꿔주면 된다.
      • virtual address (가상 주소): 프로세스가 참조하는 주소
      • physical address (물리 주소): 실제 메모리 주소
    • MMU (Memory Management Unit)
      • CPU에 코드 실행시, 가상 주소 메모리 접근이 필요할 때, 해당 주소를 물리 주소값으로 변환해주는 하드웨어 장치

    가상메모리 (Virtual Memory System) 와 MMU

    • CPU 는 가상 메모리를 다루고, 실제 해당 주소 접근시 MMU 하드웨어 장치를 통해 물리 메모리 접근
      • 하드웨어 장치를 이용해야 주소 변환이 빠르기 때문에 별도 장치를 둠
    • 프로세스 생성시, 페이지 테이블 정보 생성
      • PCB 등에서 해당 페이지 테이블 접근 가능하고, 관련 정보는 물리 메모리에 적재
      • 프로세스 구동시, 해당 페이지 테이블 base 주소가 별도 레지스터에 저장(CR3)
      • CPU가 가상 주소 접근시, MMU가 페이지 테이블 base 주소를 접근해서, 물리주소 가져옴

    Memory Management Unit

    페이징 시스템 (paging system)

    • 페이징 개념
      • 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 분리
      • 하드웨어 지원이 필요
        • ex) Intel x86 system(32bit) 에서는 4kb, 2mb, 1gb 지원
      • 리눅스에서는 4KB 로 페이징
      • 페이지 번호를 기반으로 가상 주소/물리 주소 매핑 정보를 기록/사용
    • 프로세스 (4GB)의 PCB에 Page Table 구조체를 가리키는 주소가 들어있음.
    • Page Table 에는 가상 주소와 물리 주소간 매핑 정보가 있음.

    페이징 시스템 구조

    • page 또는 page frame: 고정된 크기의 block (4KB)
    • paging system
      • 가상 주소 v = (p, d)
        • p: 가상 메모리 페이지 (페이지 번호)
        • d: p 안에서 참조하는 위치 (변위)

    페이지 테이블 (page table)

    • page table
      • 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표
      • 가상 주소 v = (p, d) 라면
        • p: 페이지 번호
        • d: 페이지 처음부터 얼마 떨어진 위치인지
    • paging system 동작
      • 해당 프로세스에서 특정 가상 주소 액세스를 하려면
        • 해당 프로세스의 page table 에 해당 가상 주소가 포함된 page 번호가 있는지 확인
        • 존재하면 이 page 가 매핑된 첫 물리 주소를 알아내고 p’
        • p’ + d 가 실제 물리주소가 됨

    다중 단계 페이징 시스템

    • 32bit 시스템에서 4KB 페이지를 위한 페이징 시스템은
      • 하위 12bit 오프셋
      • 상위 20bit 페이징 번호, 2의 20승 개의 페이지 정보가 필요함
    • 페이징 정보를 단계를 나누어 생성
      • 필요없는 페이지는 생성하지 않으면, 공갼 절약 가능
    • 페이지 번호를 나타내는 bit 를 구분해서 단계를 나눔 (리눅스는 3단계, 최근 4단계)
    • MMU 와 TLB (컴퓨터 구조)
      • TLB(Translation Lookaside Buffer): 페이지 정보 캐쉬

    페이징 시스템 
    MMU와 TLB

    페이징 시스템과 공유 메모리

    • 프로세스간 동일한 물리 주소를 가리킬 수 있음 (공간 절약, 메모리 할당 시간 절약)
    • 물리 주소 데이터 변경시
      • 물리 주소에 데이터 수정 시도시, 물리 주소를 복사할 수 있음 (copy-on-write)

    공유 메모리
    공유 메모리 데이터 수정시 

    요구 페이징 (Demand Paging 또는 Demanded Paging)

    • 프로세스 모든 데이터를 메모리로 적재하지 않고, 실행 중 필요한 시점에서만 메모리로 적재함
      • 선행 페이징 (anticipatory paging 또는 prepaging)의 반대 개념: 미리 프로세스 관련 모든 데이터를 메모리에 올려놓고 실행하는 개념
      • 더 이상 필요하지 않은 페이지 프레임은 다시 저장매체에 저장 (페이지 교체 알고리즘 필요)
    • 페이지 폴트 (page fault)
      • 어떤 페이지가 실제 물리 메모리에 없을때 일어나는 인터럽트
      • 운영체제가 page fault 일어나면, 해당 페이지를 물리 메모리에 올림

    페이지 흐름 

    페이지 폴트가 자주 일어나면 ?

    • 실행되기 전에, 해당 페이지를 물리 메모리에 올려야하니 시간이 오래걸린다.
      페이지 폴트가 안 일어나게 하려면 ?
    • 향후 실행/참조될 코드/데이터를 미리 물리 메모리에 올리면 됨
      • 앞으로 있을 일을 예측해야함 -> 거의 불가능

    페이지 교체 정책 (page replacement policy)

    • 운영체제가 특정 페이지를 물리 메모리에 올리려 하는데 물리 메모리가 다 차있다면 ?
      • 기존 페이지 중 하나를 물리 메모리에서 저장 매체로 내리고 (저장)
      • 새로운 페이지를 해당 물리 메모리 공간에 올린다.어떤 페이지를 물리 메모리에서 저장 매체로 내릴 것인가 ?
        -> Page Replacement Algorithm
    • FIFO Page Replacement Algorithm
      • 가장 먼저 들어온 페이지를 먼저 내리자
    • 최적 페이지 교체 알고리즘 (OPTimal Replacement Algorithm)
      • 앞으로 가장 오랫동안 사용하지 않을 페이지를 내리자.
      • 일반 OS 에서 구현 불가 -> 알수가 없음.
    • LRU (Least Recently Used) Page Replacement Algorithm
      • 가장 오래 전에 사용된 페이지를 교체
      • OPT 교체 알고리즘이 구현 불가능하므로 과거 기록을 기반으로 시도
    • LFU (Least Frequently Used) Page Replacement Algorithm
      • 가장 적게 사용된 페이지를 내리자
    • NUR (Not Used Recently) Page Replacement Algorithm
      • LRU 와 마찬가지로 최근에 사용하지 않은 페이지부터 교체하는 기법
      • 각 페이지마다 참조 비트 (R), 수정 비트 (M)을 둠 (R, M)
        • (0,0), (0,1), (1,0), (1,1) 순으로 페이지 교체

    스레싱 (Thrashing)

    • 반복적으로 페이지 폴트가 발생하여, 과도하게 페이지 교체 작업이 일어나, 실제로는 아무일도 하지 못하는 상황

    세그멘테이션 기법

    • 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트 (Segment)로 분할
      • 페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할
      • ex) x86 리얼 모드
        • Code Segment, Data Segment, Stack Segment, Extra Segment 로 나누어, 메모리 접근

    • 참고
      내부 단편화 (페이지 기법)
    • 페이지 블록만큼 데이터가 딱 맞게 채워져있지 않을 때 공간 낭비
      외부 단편화 (세그멘테이션 기법)
    • 물리 메모리가 원하는 연속된 크기의 메모리를 제공해주지 못하는 경우
      세그멘테이션/페이징 모두 하드웨어 지원 필요
    • 다양한 컴퓨터 시스템에 이식성을 중요시하는 리눅스는 페이징 기법을 기반으로 구현

    파일 시스템

    • 파일 시스템: 운영체제가 저장매체에 파일을 쓰기 위한 자료구조 또는 알고리즘

    파일 시스템이 만들어진 이유 (블록)

    • 0과 1의 데이터를 어떻게 저장매체에 저장할까 ?
      • 비트로 관리하기는 오버헤드가 너무 큼
      • 블록 단위로 관리하기로 함 (보통 4KB)
      • 블록마다 고유 번호를 부여해서, 관리
    • 사용자가 각 블록 고유 번호를 관리하기 어려움
      • 추상적(논리적) 객체 필요: 파일
    • 사용자는 파일단위로 관리
      • 각 파일에는 블록 단위로 관리
    • 저장매체에 효율적으로 파일을 저장하는 방법
      • 가능한 연속적인 공간에 파일을 저장하는 것이 좋음
      • 외부 단편화, 파일 사이즈 변경 문제로 불연속 공간에 파일 저장 기능 지원 필요
        • 블록체인: 블록을 링크드 리스트로 연결
          • 끝에 있는 블록을 찾으려면, 맨 처음 블록부터 주소를 따라가야함
        • 인덱스 블록 기법: 각 블록에 대한 위치 정보를 기록해서, 한 번에 끝 블록을 찾아갈 수 있도록 함
    • 다양한 파일 시스템
      • Windows: FAT, FAT32, NTFS
        • 블록 위치를 FAT라는 자료 구조에 기록
      • 리눅스 (UNIX): ext2, ext3, ext4
        • 일종의 인덱스 블록 기법인 inode 방식 사용

    파일 시스템과 시스템콜

    • 동일한 시스템콜을 사용해서 다양한 파일 시스템 지원 가능토록 구현
      • read/write 시스템 콜 호출시, 각 기기 및 파일 시스템에 따라 실질적인 처리를 담당하는 함수 구현
        • ex) read_spec/write_spec
      • 파일을 실제 어떻게 저장할지는 다를 수 있음
        • ex 리눅스) ext4 외 NTFS, FAT32 파일 시스템 지원

    inode 방식 파일 시스템

    • 파일 시스템 기본 구조
      • 수퍼 블록: 파일 시스템 정보
        • 파일 시스템 정보 및 파티션 정보 포함
      • 아이노드 블록: 파일 상세 정보
      • 데이터 블록: 실제 데이터

    Inode 와 파일

    • 파일: inode 고유값과 자료구조에 의해 주요 정보 관리
      • 파일이름:inode 로 파일이름은 inode 번호와 매칭
      • 파일 시스템에서는 inode 를 기반으로 파일 액세스
      • inode 기반 메타 데이터 저장

    inode 구조
    inode 구조와 파일 데이터

    부팅, 가상 머신

    Boot

    • 컴퓨터를 켜서 동작시키는 절차
    • Boot 프로그램
      • 운영체제 커널을 Storage에서 특정 주소의 물리 메모리로 복사하고 커널의 처음 실행위치로 PC 를 가져다 놓는 프로그램
    • 부팅 과정
    • 컴퓨터를 키면 BIOS가 특정 Storage 를 읽어와 bootstrap loader 를 메모리에 올리고 실행한
    • bootstrap loader 프로그램이 있는 곳을 찾아서 실행시킴

    가상머신

    • 가상머신 (Virtual Machine): 하나의 하드웨어 (CPU, Memory 등)에 다수의 운영체제를 설치하고, 개별 컴퓨터처럼 동작하도록 하는 프로그램
    • Virtual Machine Type1 (native, bare metal)
      • 하이퍼 바이저 (VMM): 운영체제와 응용프로그램을 물리적 하드웨어에서 분리하는 프로세스
      • 하이퍼 바이저 또는 버추얼 머신 모니터(VMM) 라고 하는 소프트웨어가 Hardware 에서 직접 구동
        • Xen, KVM (AWS 등에서 사용)
          [image:05CAC80A-456C-4DC2-A2EF-E8F86D9D0858-627-000006AEA7BC6D55/스크린샷 2021-04-24 오후 6.43.07.png]
    • Virtual Machine Type2
      • 하이퍼바이저 또는 VMM 라고 하는 소프트웨어가 Host OS 상위에 설치
        • VMWare, Parallels Desktop (Mac)
    • Full Virtualization (전가상화) vs Half Virtualization (반가상화)
      • 전가상화: 각 가상머신이 하이퍼바이저를 통해서 하드웨어와 통신
        • 하이퍼바이저가 마치 하드웨어인 것처럼 동작하므로, 가상머신의 OS는 자신이 가상 머신인 상태인지를 모름
      • 반가상화: 각 가상머신에서 직접 하드웨어와 통신
        • 각 가상머신에 설치되는 OS는 가상 머신의 경우, 이를 인지하고, 각 명령에 하이퍼바이저 명령을 추가해서 하드웨어와 통신

    가상머신
    Virtual Machine Type1
    Virtual Machine Type2
    전가상화
    반가상화 

    최근 하드웨어 성능 개선으로 전가상화 기술을 선호

    또 다른 가상 머신 Docker

    • 가상 머신은 컴퓨터 하드웨어를 가상화 (하드웨어 전체 추상화)
      • 하이퍼바이저 사용, 추가 OS 필요 등 성능 저하 이슈 존재
    • Docker는 운영체제 레벨에서 별도로 분리된 실행 환경을 제공 (커널 추상화)
      • 리눅스 처음 설치했을때와 유사한 실행환경을 만들어주는 리눅스 컨테이너 기술 기반
      • 리눅스 컨테이너 기술이므로 macOS, windows에 설치할 경우는 가상 머신 기반 제공

    VM vs Docker 

    가상머신 정리

    • Bare-Metal 방식이 가장 성능이 좋다.
      • 하드웨어 직접 액세스 하기 때문
      • AWS 환경도 Bare-Metal 기반 가상 머신 기술 활용 (KVM)
    • Docker는 경량 이미지로 실행환경을 통째로 백업, 실행 가능
      • Date Engineering 에서 Docker로 시스템 환경 설정 + 프로그램을 한번에 배포
      • ex ) 프로그램 업데이트 -> Docker 이미지 작성 -> Jenkins로 배치잡 생성 및 실행 (AWS EC2 재생성 및 Docker 이미지 설치, 실행)

    ※ 출처

    패스트캠퍼스 컴퓨터 공학 강의

    'CS' 카테고리의 다른 글

    네트워크  (2) 2021.05.31
    시스템 프로그래밍 - 쉘, 쉘스크립트  (0) 2021.05.09
    운영체제 - 1  (0) 2021.04.18
    리눅스 중요 명령어  (0) 2021.01.16
    HTTP 8. 캐시와 조건부 요청  (0) 2021.01.08
킹수빈닷컴