티스토리 뷰

CS

운영체제 - 2

kingsubin 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