파일 시스템

  • 컴퓨터의 디스크에서 데이터를 저장, 검색, 공유하는 방식을 정의하는 것
  • 파일 구조: 관련된 정보의 묶음, 논리적 저장장치 단위
  • SSD에 상주하며 논리 장치를 물리 장치로 변환하여 저장장치에 대한 사용자 인터페이스를 제공한다.
  • 디스크에 대한 효율적이고 편리한 접근을 제공한다.
  • 디스크는 즉성에서 다시 쓰는 것이 가능하고 임의 접근을 제공한다.
  • File control block: 파일에 관한 정보로 구성된 저장장치 구조
  • 계층(트리) 구조를 이룬다.

inodes

  • index + node 합친 것
  • 유닉스에서만 쓰는 용어
  • 파일 컨트롤 블록
  • 권한, 만든 사람, 만든 시간
  • 가지고 있는 데이터 블록들의 번호 13개를 가지고 있음
  • inode가 가지고 있는 번호 10개는 실제 데이터가 있는 번호 3개는 실제 데이터가 있는 곳에 대한 인덱스 정보 
    • 1024*10 보다 큰 파일 이라면 간접 인덱싱 기법을 사용하여 표시
    • 하드디스크에 있는 데이터 블록 번호를 가르킴

파일 시스템 계층

  • 장치 드라이버(I/O control) 입출력 제어 층에서 입출력 장치를 관리
  • 기본 파일 시스템(basic file system)은 물리적 블록 번호를 장치 드라이버에게 전달 한다.
    • 버퍼는 전송 중인 데이터를 유지한다.
    • 캐시는 자주 사용되는 데이터를 유지한다.
  • 파일 구성 모듈(file-organization module)은 파일, 논리 주소, 및 물리 주소를 변환한다.
  • logical file system은 파일 제어 블록(unix의 inodes)를 유지하여 파일 이름을 파일 번호, 파일 핸들, 위치로 변환한다.

파일 시스템 주요 구성 요소 

  • API 수준에서 시스템 콜이 있만 해당 기능을 어떻게 구현하는가?
    • 디스크 및 메모리에 존재하는 구조로 구현됨
  • 부팅 제어 블록(Boot control block): 해당 볼륨에서 OS를 부팅하는데 필요한 정보가 포환된 블록
    • 구조: 부트 블럭(0), 슈퍼 블럭(1), inode 블럭(2 ~ n개)
    • 문제: 16개의 inode 블록이 있을 때 125번 데이터 블록은 몇번 inode에 존재하는가?
    • 풀이: 125/16 = 7..13 → inode 시작 번호는 2 따라서 9번 inode에 데이터 블록이 존재한다.
  • 볼륨 제어 블록(Volume control block): superblock, 마스터 파일이라 불리우며 볼륨 세부 정보가 포함된 블록
  • 파일 제어 블록: 파일 생성 날짜, 파일 주인 그룹 권한, 파일 사이즈, 파일 데이터 블록 위치 등이 기록된 해당 파일을 제어하는데 필요한 정보가 기록된 블록 
  • 마운트 테이블: 파일 시스템 마운트, 마운트 포인트, 파일 시스템 유형을 저장하는 공간 

메모리 내 파일 시스템 구조

가상 파일 시스템

  • 가상 파일 시스템 (VFS): Unix에서 파일 시스템을 구현하는 객체 지향 방식
  • 구현 객체 방식
    • inode: 파일 시스템 내의 각 파일이나 디렉토리를 고유하게 식별하는 정보를 가진 구조체
    • file: 프로세스가 파일을 열 때마다 생성되는 파일 구조체
    • superblock: 파일 시스템의 전반적인 정보를 저장하는 구조체
    • dentry: 파일 시스템 내의 파일이나 디렉토리 이름을 inode와 연결하는 역할을 가진 구조
  • 지원하는 객체 연산 집합
    • int open(): 파일을 열고 해당 파일에 대한 파일 디스크립터를 반환합니다.
    • int close(): 열려 있는 파일을 닫습니다.
    • ssize t read(): 열려 있는 파일에서 데이터를 읽습니다.
    • sszie t write(): 열려 있는 파일에 데이터를 씁니다.
    • int mmap(): 파일이나 장치를 메모리에 매핑합니다. 이를 통해 파일이나 장치의 일부 또는 전체를 직접 메모리에 액세스할 수 있게 해줍니다.

'CS > OS' 카테고리의 다른 글

가용 공간 관리  (0) 2023.06.06
제목: ZFS: 아키텍처, 개념, 주요 기능, 장단점  (0) 2023.06.05
파일, 디스크, 디렉터  (0) 2023.05.29
대용량 저장장치 시스템 1  (0) 2023.05.23
메모리 관리 기법  (0) 2023.05.22

배경지식

  • 프로그램이 실행되기 위해서는 메모리로 반입되어 프로세스 내에 배치되어야 한다.
  • 메인 메모리와 레지스터는 cpu가 직접 접근할 수 있는 유일한 저장장치이다.
  • 메모리 하드웨어는 주소, 읽기 요청, 쓰기 요청이 가능해야 한다.
  • 메인 메모리와 CPU레지스터 사이에 캐시가 존재한다.

메모리 주소 바인딩 시점 3가지

  • 컴파일 시간 바인딩: 컴파일시 메모리 주소를 정하고 생성 되는 이진코드
    • 이는 절대 코드라고 한다
    • 만약 해당 위치가 변경되어야 한다면 다시 컴파일 되어야 한다.
  • 적재 시간 바인딩: 프로세스가 메모리 내 어디로 올라오게 될지 컴파일 시점에서 알 수 없을 때 컴파일러가 만드는 이진 코드
    • 재배치 가능 주소
    • 메인 메모리로 실제 적재되는 순간에 바인딩이 이루어짐
  • 실행 시간 바인딩: 실행 중에 메모리 위치 변경(메모리 참조가 일어 날때)
    • 특별한 하드웨어가 필요하다.

사용자 프로그램 처리의 여러 단계 

논리 대 물리 주소 공간

  • 논리 주소: CPU에 의해 생성되는 가상 주소 (논리 주소는 연속적으로 할당)
  • 물리 주소: 메모리 장치에서 인식되는 주소 (물리 주소는 연속적으로 할당 되지 않음 그때 그때 빈 공간 할당)
  • 프로그램 실행 중에는 가상 주소를 물리 주소로 바꾸어주어야 한다.
    • 하드웨어 장비 메모리 관리기(MMU) 를 통해 작업
      • 재배치 레지스터를 사용하여 CPU와 메모리 사이에서 주소를 변환
      • 논리적인 주소를 매우 빠른 속도로 물리적인 주소로 바꿔주는 장치               
  • 컴파일 시간과 적재 시간 바인딩 기법에서는 동일하지만 실행 시간 바인딩 에서는 서로 다르다.
  • 사용자 프로그램은 논리 주소만을 다루고 절대로 실제 물리 주소를 다룰 수 없다.

동적 링킹, 정적 링킹

  • 정적 링킹: 로더가 시스템 라이브러리와 프로그램 코드를 결합하여 이진 프로그램 이미지 생성 정적 라이브러리를 이용할 때 사용
  • 동적 링킹: 실행 시간까지 링킹이 연기됨 공유되는 라이브러리를 이용할때 사용
    • 루틴이 필요한 경우에만 적재되기 때문에 선호되는 방식

기본 스와핑

  • 프로세스가 메모리에서 보조 저장장치로 스왑(아웃, 인) 되는 것
    • 스왑 아웃(롤 아웃): 메모리 → 보조 저장장치
    • 스왑 인(롤 인): 보조 저장장치 → 메모리
  • 총 전송 시간은 스왑 되는 메모리의 양의 비례한다.
  • 스왑 아웃된 프로세스는 다시 스왑 인 될 때 같은 물리 주소에 적재되지 않을 수도 있다.
  • 현대 운영체제는 기본 스와핑을 사용하지 않는다.
    • 초기 운영체제는 메모리가 부족하는 문제가 잦고 이를 해결할 고급 기법이 존재하지 않았기에 메인 메모리를 보조 저장 장치로 옮길 필요가 있었다.

스와핑의 메모리 효율

  • 메모리 사용 효율이 좋지 않아 이를 해결 하기 위해 페이징 기법이 생겼다.

스와핑을 포함한 문맥 교환 시간

  • 프로세스의 크기에 비례하여 문맥 교환 시간이 길어진다.
  • 함부로 Swap out을 한다면 데이터 일관성을 해칠 수 있기 때문에
    • 이중 버퍼링 기법(작업을 따로 버퍼에 저장하고 끝나면 반영하는 방식)을 사용하게 되어 (오버 헤드)문맥 교환 시간이 늘어나게 된다.
  • 다음에 실행시킬 프로세스가 메모리에 없다면 프로세스 하나를 스왑 아웃 시키고 목표 프로세스를 스왑인 해야 한다.
  • 추가 제약
    • 기존 프로세스의 I/O 작업이 끝나지 않았다면 스와핑이 불가능 하다.

모바일 시스템에서의 스와핑

  • 보통은 지원되지 않음
    • 플래시 메모리 기반으로 적은 공간을 가지고 쓰기 사이클의 횟수가 제한적
  • 메모리 확보를 위해 다른 방법 사용
    • IOS에서는 앱이 자발적으로 메모리를 반환할 것을 요구한다.
      • 메모리 확보에 실패하면 앱을 종료시킴
    • Android에서는 IOS와 마찬가지로 가용 메모리가 적을 경우 앱을 종료시키지만 추가로 빠르게 재시작 시킬 수 있도록 앱 상태를 플래시에 기록한다.

연속 메모리 할당

  • 메인 메모리는 운영체제와 사용자 프로세스 모두 지원해야 한다.
  • 메인 메모리를 2개로 분할
    • 상주하는 운영체제, 보통 인터럽트 벡터와 함께 메모리 앞쪽에 위치
    • 사용자 프로세스는 그 이후 영역에 배치한다

다중 분할 할당

  • 분할의 개수가 다중 프로그래밍의 정도를 제한
  • 가변분할: 효율을 위하여 크기를 조절
  • Hole: 가용 메모리 블록에서 빈 부분
    • 프로세스가 도착할 때 프로세스를 포함할 만큼 큰 Hole에서 메모리를 할당 받는다.

동적 메모리 할당 문제

  • 최초 적합(First-fit): 충분히 큰 최초의 hole을 할당
  • 최적 적합(Best-fit): 충분히 큰 가장 작은 hole을 할당
    • 시간은 오래 걸리지만 메모리를 효율적으로 관리 가능
  • 최악 접합(Worst-fit): 가장 큰 hole을 할당
  • 최초 적합과 최적 접힙이 최악 적합 보다 속도와 공간 이용률 측면에서 더 좋다.

단편화

  • 외부 단편화: 프로세스들이 메모리에 적재되고 제거되면서 생성된 작은 자유 공간(hole)들
    • 밀집(compaction)작업으로 줄이는 것이 가능: 주 기억 장치에서 사용 되지 않은 공간을 한 곳으로 모으는 것
  • 내부 단편화: 홀에서 다른 프로세스에게 공간을 할당 하고 남은 공간
  • 최초 적합에 대해 N 블록이 할당된다면 0.5N개의 블럭이 단편화로 사용할 수 없게 된다. (50% 규칙)

세그먼테이션

  • 가변적인 메모리 공간(세그먼트)를 관리하는 기법
  • 세그먼트 구조
    • <segment-number, offset> 2tuple 구조
  • 세그먼트 테이블 (메인메모리에 존재하는 세그먼트 정보가 새겨진 테이블)
    • 물리적 주소와 논리적 주소가 둘다 연속적이지 않기 때문에 대응시켜주는 표가 필요하기 때문에 존재.
    • 세그먼트가 메인메모리에 존재한다면 유효 세그먼트 그렇지 않다면 불법 세그먼트
    • read/write/execute 특권 정보

페이징

  • 크기가 고정적인 메모리 공간을 관리하는 기법
  • 페이지 테이블을 통해 논리적 주소에서 물리적 주소를 찾아간다.
  • 평균적으로 n/2의 크기가 낭비가 된다.
  • 주소변환 기법: (비트 구성(32) = 페이지 크기(n) + 페이지 갯수(32-n))
    • Page offset: 페이지 크기가 커진다면
      • 페이지 크기가 클수록 입출력의 속도가 빨라진다.
      • 가용 공간이 늘어난다.
      • 남는 공간이 많이 생기게 된다. (내부 단편화가 심해진다)
    • Page number: 페이지 갯수

'CS > OS' 카테고리의 다른 글

스레싱  (0) 2023.05.22
페이징  (0) 2023.05.21
CPU 스케쥴링2  (0) 2023.05.01
동기화 사례  (0) 2023.04.24
임계 구역 문제  (0) 2023.04.24

<운영체제에서의 고전적인 동기화 문제>

식탁에 생각하고 먹으면서 생애를 보내는 철학자 5명이 둘려 앉고 

가운데에 음식이 있고 젓가락의 갯수는 철학자의 수와 동일하다. 

철학자는 음식을 집어 먹기 위해서는 젓가락 2개를 잡아야 한다.

+ 이미 옆 사람 손에 들어간 젓가락을 집을 수는 없다.

 

RICE: 공유 자원

철학자: 프로세스

밥을 먹는 것: 작업을 하기 위해 필요한 공유 자원을 이용하는 행위

젓가락: 세마포

밥을 먹지 못해 굶어 죽는 것: 기아

 

+& 세마포란?

  • 세마포어(Semaphore)는 상호 배제, 동기화, 임계 영역 등 다중 프로세스 간 동기화 문제를 해결하기 위해 사용되는 동기화 도구를 말한다.
  • 세마포어는 wait()과 signal()이라는 두 개의 연산으로 이루어져 있으며 wait() 연산은 세마포어 값을 감소시키고, 값이 0보다 작아지면 해당 프로세스는 블록된다. signal() 연산은 세마포어 값을 증가시키고, 이를 기다리는 다른 프로세스가 있다면 하나를 깨우게 된다.

 

문제점: 만약 모든 철학자가 배가고파 자기 오른쪽에 있는 젓가락을 집는다면 모두가 밥을 먹지 못 하고 기다려야 하는 (교착 상태)상황이 일어나게 된다. 

 

<해결법>

  1. 철학자의 수를 줄인다 (프로세스의 수 감소)
  2. 한 철학자가 젓가락 두 개를 모두 집을 수 있을 때만 젓가락을 집도록 허용한다. (임계구역 안에서만 작업 - 모니터)
  3. 비대칭 해결안: 홀수 번호의 철학자는 왼쪽 젓가락 먼저 집고 짝수 번호의 철학자는 오른쪽 젓가락을 먼져 집도록 하여 모두가 젓가락을 하나씩만 잡은 상황을 방지한다. (알고리즘 적 해결)

 

 

 

'CS > OS' 카테고리의 다른 글

CPU 스케줄링 알고리즘  (0) 2023.04.18
CPU 스케줄링 기준  (0) 2023.04.17
프로세스  (0) 2023.03.20
운영체제 구조  (0) 2023.03.13
저장장치 계층 구조  (5) 2023.03.13

운영체제란 무엇인가?

  • 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 중개자 역활을 하는 프로그램

운영체제의 목표

  • 사용자 프로그램을 실행하고 사용자 문제를 보다 쉽게 해결할 수 있도록 하자
  • 컴퓨터 시스템을 사용하기 편리하게 만들자
  • 컴퓨터 하드웨어를 효율적으로 사용하자

컴퓨터 시스템 구조

  • 하드웨어
    • CPU
    • 메모리
    • I/O 장치
  • 운영체제: 다양한 응용 프로그램 및 사용자 간의 하드웨어 사용을 제어하고 조정합니다.
  • 응용프로그램: 워드, 컴파일러, 웹 브라우저, 데이터베이스 시스템, 비디오 게임
  • 사용자: 사람, 기계, 다른 컴퓨터

운영체제가 하는 일

  • 자원의 이용률을 관리한다.
  • 워크스테이션의 전용 자원과 서버가 제공하는 공유 자원을 효율적으로 사용 하도록 한다.
  • 관점에 따라 달라진다

운영체제의 정의

  • 모든 사람들이 받아들이는 정의는 없다.
  • OS는 자원 할당기
    • 모든 자원을 관리: cpu, 메모리, 입출력 장치
    • 효율과 공정한 자원 사용을 목적으로 하는 상충된 요구 사이에서 결정
  • OS는 제어 프로그램
  • 운영체제를 주문했을 때 판매자가 배송하는 모든 것
  • 컴퓨터에서 항상 실행되는 유일한 프로그램을 커널이라고 한다.
  • 그 외 다른 모든 것들은
    • 시스템 프로그램(운영체제와 같이 배송됨)이거나
    • 응용프로그램
  • 커널 + 시스템 프로그램 + 응용프로그램

컴퓨터 시동

  • 부트스트램 프로그램이 전원이 공급되는 시점 혹은 다시 부트될 때 적재된다
    • 통상 ROM 또는 EPROM에 저장되고 펌웨어라고 불림
    • 시스템의 모든 구성을 초기화 한다.
    • 운영체제 커널을 적재 시킨 후 커널을 실행 시킨다.

컴퓨터 시스템 구성

  • 하나 이상의 CPU와 장치 제어기
    • 공유 메모리에 접근할 수 있도록 공통 버스로 연결되어 있다.
    • CPU와 장치는 병행 수행하기 때문에 메모리를 사용하기 위해 경쟁함
      • 동시에 접근 불가능

컴퓨터 시스템 연산

  • 입출력 장치와 CPU는 병행 실행된다
  • 각 장치 제어기는 특정 유형의 장치를 책임진다
  • 각 장치 제어기는 지역 버퍼를 가진다.
  • CPU는 메인 메모리는로 지역 버퍼(캐쉬 메모리) 혹은 지역 버퍼에서 메인 메모리로 데이터를 이동한다.
  • 입출력은 장치에서 제어기의 지역 버퍼로 데이터를 이동하는 것이다
  • 장치 제어기는 인터럽터를 발생시켜 CPU에게 연산이 끝났음을 알린다.

인터럽트의 공통 기능

  • 인터럽트는 인터럽트 서비스 루틴에게 제어권을 넘긴다.
    • 종류별로 서비스 루틴이 다를 수 있으며
    • 모든 서비스 루틴의 주소를 저장하고 있는 자료구조를 인터럽트 벡터라고 한다.
  • 인터럽트 아키텍처는 반드시 인터럽트 된 명령어의 주소를 저장해야 한다.
  • 트랩 또는 예외는 소프트웨어가 발생시킨 인터럽트를 의미한다
    • 인터럽트: 명령어가 끝나고 새로운 명령어가 시작되기 전 처리
    • 예외: 명령어가 끝나기 전에 처리 (의미가 더 강함)
  • 운영체제는 인터럽트가 발생하여 작동을 시작하는 방식(Interrupt driven)

인터럽트 핸들링

  • CPU는 인터럽트가 발생한 신호를 파악
    • 과거: poliling (주기적으로 cpu가 모든 기기를 체크)
    • 현재: vectored (cpu가 발생한 신호를 분석해서 거기에 맞는 인터럽트 시스템을 전달)

입출력 구조

  • 전제조건: cpu하고 별도의 하드웨어가 필요
  • 운영체제가 핵심기능을 가지고 있기 때문에 운영체제에게 핵심기능을 요청하는 식으로 구현 됨
  • 입출력이 시작된 후, 제어권은 완료를 기다리지 않고 바로 사용자 프로그램에게 넘어간다
    • 시스템 호출: 사용자가 입출력 완료를 대기할 수 있도록 운영체제에게 요청
    • 장치 상태 테이블: 장치마다 유형 주소와 상태를 표시
    • OS는 장치의 상태를 결정하고 인터럽트를 추가하기 위하여 항목을 갱신할 때 테이블을 찾아본다.

저장장치의 정의와 표기

  • 기본단위는 비트
  • 한 바이트는 8비트 대부분에 컴퓨터에서는 가장 작은 편리한 저장 된위
  • 1 킬로바이트 KB 2^10
  • 1 메가바이트 MB 2^20
  • 1 기가바이트 GM 2^30
  • 1 테라바이트 TB 2^40
  • 1 페타바이트 PB 2^50

저장장치 구조

  • 메인 메모리: CPU가 직접 접근할 수 있는 유일한 대용량 저장 매체
    • 임의 접근
    • 휘발성
  • 보조 저장장치: 대용량 비휠발성 저장 용량을 제공하는 메인 메모리의 확장
  • 하드 디스크: 자성 기록 가능 물질로 덮힌 단단한 금속 또는 유리 플래터
    • 디스크 표면이 논리적인 트랙으로 나뉘고 트랙은 다시 섹터로 나뉜다
    • 디스크 제어기가 장치와 컴퓨터의 논리적인 상호 작용을 결정한다.
  • 반도체 디스크: 하드 디스크 보다 빠른 비휠발성 저장 매체
    • 다양한 기술
    • 점점 더 대중화 되고 있음

'CS > OS' 카테고리의 다른 글

CPU 스케줄링 기준  (0) 2023.04.17
식사하는 철학자 문제  (0) 2023.04.11
프로세스  (0) 2023.03.20
운영체제 구조  (0) 2023.03.13
저장장치 계층 구조  (5) 2023.03.13

+ Recent posts