일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- C언어
- IOS
- Swift
- 연결리스트
- xocde
- 백준
- 예외처리
- storyboard
- 준코딩
- 플러터
- Android Studio
- TextField
- 버블정렬
- FLUTTER
- 안드로이드스튜디오
- 커스텀팝업
- label
- 안드로이드
- BAEKJOON
- 자바
- 보호와 보안
- customPopup
- 링크드리스트
- swift baekjoon
- android java
- Firebase
- deeplink
- Xcode
- text to speech
- Android
- Today
- Total
준코딩
파일 시스템 본문
파일 시스템
-사용자가 운영체제에서 가장 관찰하기 쉬운 부분이다.
-파일의 이름을 정하고 저장, 검색을 위해서 논리적으로 어디에 위치시켜야 하는지에 대한 방법을 구성한 시스템.
파일의 개념
-컴퓨터는 정보를 자기 디스크, 자기테이프, 광디스크 같은 다양한 저장매체에 저장할 수 있다.
-저장장치들은 일반적으로 비휘발성이다.
파일 속성
-이름, 식별자, 유형, 위치, 크기, 보호, 시간, 날짜, 사용자 식별
-모든 파일에 대한 정보는 보조 저장장치에 상주하는 디렉터리 구조 내에 유지된다.
파일 연산
-파일이란 추상적인 데이터 유형이다. 파일을 적절히 정의하기 위해 파일에 대해 실행할 수 있는 연산들을 고려해 볼 필요가 있다.
-파일 생성, 파일 쓰기, 파일 읽기, 파일 내에서 위치 재설정, 파일 삭제, 파일 절단 이 6개 기본 연산들은 파일 조작에 필요한 최소 연산들이다..
파일 유형
-파일 시스템은 물론 전체 운영체제 설계 시 중요한 사항 중 하나는 운영체제가 파일 유형을 인식하고 지원할 것인지를 결정하는 것이다.
-운영체제가 파일 유형을 인식한다면 운영체제는 파일에 대해
합리적인 연산을 실행할 수 있다.

파일 구조
-파일의 유형을 사용하여 파일의 내부 구조 형태를 짐작할 수 있다.
-운영체제에서 지원하지 않는 파일 유형이 요구되는 새로운 응용 프로그램의 경우는 문제가 발생할 수 있다.
Ex) 실행파일이 메모리 상 어느 위치에 적재되며 첫 번째로 실행할 명령어의 위치를 운영체제가 파악할 수 있도록
구조를 가져야만 한다
파일 잠금
-공유 잠금: 여러 프로세스가 동시에 잠금을 획득할 수 있다.
-배타적 잠금: 한 번에 한 프로세스만 잠금을 획득할 수 있다.
->모든 운영체제가 두 종류의 잠금을 모두 지원하지는 않는다.
->운영체제는 강제적(Windows) 또는 권고적(UNIX) 파일 잠금 방법을 제공할 수 있다.
접근 방법
-파일이 사용될 때 이 정보가 반드시 접근되어 컴퓨터 메모리로 읽혀야 한다.
순차 접근
-가장 간단한 접근방법이다. 파일의 정보가 레코드 순서로 차례대로 처리된다.

직접 접근
-파일은 고정 길이의 논리 레코드들로 구성되고 특별한 순서 없이 빠르게 레코드를 읽고 쓸 수 있다.

기타 접근
-파일에 대한 색인을 사용한다. 찾으려는 레코드가 있으면 먼저 이 색인부터 찾아
그에 대응하는 포인터를 얻는다. 그런 다음 그 포인터를 사용하여 파일을 직접
접근하고 원하는 레코드를 찾는다.
(색인): 검색을 빠르게 하기 위해 데이터를 저장하는 장소
->특정 장소에 데이터를 저장하는 과정
디렉터리 구조
-디렉터리: 파일 시스템 내부에 있는 것으로, 효율적인 파일 사용을 위해 디스크에 존재하는 파일에 대한 여러 정보를
가지고 있는 특수한 형태의 파일이다.
저장소의 구조
-디스크는 전체를 파일 시스템으로 사용할 수 있다. 파일 시스템을 포함하고 있는 각 볼륨은 시스템에 존재하는 파일에
대한 정보 또한 가지고 있어야 한다.
디렉터리 개관
-디렉터리에서 실행될 수 있는 연산
->파일 찾기, 파일 생성, 파일 삭제, 디렉터리 나열, 파일의 재명명, 파일 시스템의 순회

1단계 디렉터리
-가장 간단한 구조의 디렉터리, 모든 파일이 같은 디렉터리에 존재하기 때문에 지원이 쉽고 이해하기 쉽다.
->파일이 많아지거나 다수의 사용자가 사용할 경우 심각한 제약이 따른다
->각 파일들은 서로 유일한 이름을 가진다. 서로 다른 사용자라 하더라도 같은 이름은 사용할 수 없다.

2단계 디렉터리
-사용자들에게 개별적인 디렉터리를 만들어 준다.
-UFD(User File Directory): 자신만의 사용자 파일 디렉터리, 비슷한 구조를 가지고 있지만 오직 한 사용자만의 파일을
저장한다.
-MFD(Master File Directory): 사용자의 이름이나 계정 번호로 색인되어있고, 각 엔트리는 사용자의 UFD를 가리킨다.
디렉터리엔트리: 디렉토리를 표현하는 데에 쓰이는 자료구조

트리 구조 디렉터리
-2단계 구조 디렉터리를 확장하여 다단계 트리 구조로 만들 수 있다.
-사용자들이 자신의 서브 디렉터리를 만들어서 파일을 구성할 수 있게 한다.

비순환 그래프 디렉터리
-디렉터리들이 서브 디렉터리와 파일을 공유할 수 있도록 허용한다.
-디스크 공간을 절약할 수 있다.
-디렉터리 구조가 복잡하고, 공유된 하나의 파일을 탐색할 경우 다른 경로로
두 번 이상 찾아갈 수 있으므로 시스템 성능이 저하될 수 있다.

일반 그래프 디렉터리
-트리 구조에서 새로운 링크를 추가한 것
-탐색 알고리즘이 간단하다.
-불필요한 파일을 제거하여 사용 공간을 늘리기 위하여 참조 계수기가 필요함.
링크: 다른 파일이나 하위 디렉터리를 가리키는 포인터

파일 시스템 마운팅
-파일이 사용되기 전에 열리는 것처럼 파일 시스템은 프로세스들에 의해 사용되기 전에 마운트 되어야 한다.
마운트 과정
1. 파일.
2. 디바이스가.
3. 운영체제는마운트 포인트에 장착되었음을 디렉터리 구조에 기록
->이 기법은 운영체제가 디렉터리 구조를 순회하고 파일 시스템을 적절히 교체할 수 있게 한다.
파일 공유
-공동 작업을 원하거나 결과를 얻기 위해 필요한 노력을 줄이기를 원하는 사용자에게 중요하다.
다수의 사용자
-운영체제가 여러 사용자를 수용할 때 파일 공유, 파일 지명, 파일 보호가 더욱 중요해진다.
-디렉터리 구조가 사용자의 파일 공유를 허용한다면 시스템은 파일 공유를 중재해야 한다.
원격 파일 시스템
-네트워크의 출현으로 원격 컴퓨터 간 통신이 가능해졌다. 네트워크는 캠퍼스 안에 또는 세계 곳곳에 퍼진 자원을
공유하는 것을 가능하게 했다.
->공유 가능한 명백한 자원은 파일 형태로 제공되는 데이터이다.
클라이언트 서버 모델
-컴퓨터가 하나 이상의 원격 시스템으로부터 여러 파일 시스템을 마운트 하는 것을 허용한다.
->파일을 가지고 있는 컴퓨터를 서버, 파일에 접근하기를 원하는 컴퓨터를 클라이언트
-클라이언트 신원 확인은 좀 더 어렵다. 클라이언트는 네트워크 이름이나 IP주소 같은 다른 식별자로 확인 가능하지만
이런 것들은 도용되거나 모방될 수 있다.
->도용의 결과로 인증되지 않은 클라이언트가 서버를 접근하도록 허가 받을 수 있다. 보다 안전한 해결 방안은 암호화된
키를 통하여 클라이언트를 보안 인증하는 것이다.
분산 정보 시스템
-클라이언트-서버 시스템을 쉽게 관리하기 위해 분산 정보 시스템 이 원격 컴퓨팅을 위해 필요한 정보에
단일화된 접근을 제공한다.
->도메인 네임 서비스(DNS)은 WWW를 포함하는 전체 인터넷의 호스트 이름을 네트워크 주소로 변환하는 서비스를
제공한다.
일관성 의미
-파일 공유를 지원하는 파일 시스템을 평가하는 데 있어 중요한 기준
-여러 사용자가 동시에 공유 파일을 접근하는 방법
->한 사용자가 데이터를 변경했을 때 다른 사용자가 변경된 데이터를 언제 사용하게 되는지를 지정
->동기화 알고리즘과 직접적으로 관련된다.
보호
-정보가 컴퓨터 시스템에 저장되어 있을 때 정보가 물리적인 손상(신뢰성)과 부적절한 접근(보호)으로부터
안전하게 유지되어야 한다.
-신뢰성은 일반적으로 파일의 복사본에 의해 제공된다. 많은 컴퓨터는 파일 시스템이 뜻하지 않게 파괴될 경우를
대비하여 복사본을 유지하기 위해 규칙적으로 디스크 파일을 테이프에 자동 복사하는 시스템 프로그램을 가지고 있다.
-보호 방법은 여러 가지가 있다. 소규모의 단일 사용자 시스템은 단순히 USB에 담아 그것을 책상 서랍이나 금고에 넣어
잠가 놓으면 된다.
접근 제어
-보안 상 위험으로부터 제반 시설 및 환경을 보호하는 보안 대책.
-인증 접근 제어 : 비인가자 (또는 단말)의 사용을 막는 접근 통제
->각 파일이나 디렉터리에 접근 제어 리스트(ACL)를 연관하여 사용자가 요청한 접근에 대하여 권한이 있는지 확인.
-패킷 접근 제어 : 불필요 패킷을 걸러내거나 입출 제한
기타 보호 방법
-파일마다 패스워드를 연결시킨다.
->파일이 너무 많아지면 패스워드를 기억하기 힘들다.
-읽기, 쓰기 권한에 패스워드를 사용한다.
파일 시스템 구조
-디스크는 파일 시스템을 유지하기 위한 많은 보조 저장장치를 제공한다.
디스크 특징
-제자리에서 재기록이 가능하다.
-저장하고 있는 임의의 위치의 정보를 직접 접근할 수 있다.
디스크를 효율적이고 편리하게 접근하기 위해서 운영체제는 디스크 내에 반드시 하나 이상의 파일 시스템을 구성한다.
->파일 시스템은 데이터를 쉽게 저장하고, 찾고 또한 검색할 수 있다.
파일 시스템 구현
-많은 디스크 상의 구조와 메모리 내 구조가 파일 시스템을 구현하는데 사용된다.
-디스크에 유지되는 정보
*부트 제어 블록 : 운영체제를 부팅하기 위해 필요한 정보
*파티션 제어 블록 : 파티션에 대한 정보를 유지하는 블록으로 파티션의 크기, 블록의 크기, 빈 블록수, 빈 블록 포인터
빈 FCB수, FCB포인터 등등
*디렉터리 구조

파티션과 마운팅
-파티션: *하나의 디스크가 여러 개의 파티션으로 분할 가능
*하나의 파티션에 여러 개의 디스크가 사용됨
미가공 파티션(raw disk): 파일 시스템을 포함하지 않음
->유닉스의 스왑공간, 데이터베이스에서 자체적인 포맷을 사용할 때
가공된 파티션(cooked disk): 파일 시스템을 포함
-마운팅: 하나의 파일 시스템을 다른 파일 시스템에 붙이는 것


가상 파일 시스템(VFS: Virtual File System)
: 파일 시스템 인터페이스를 제공하기 위해 구현된 커널의 서브시스템이다. 모든 파일 시스템은 공존하는 것 뿐만 아니라
상호 동작하기 위하여 VFS에 의존한다.
->클라이언트 응용 프로그램이 여러 파일 시스템에 같은 방법으로 접근 가능
디렉터리 구현
-디렉터리 할당과 디렉터리 관리 알고리즘의 선택은 파일 시스템의 효율, 성능 및 신뢰성에 매우 큰 영향을 미친다.
*선형 리스트
-파일 이름과 데이터 블록을 가리키는 포인터들의 선형 리스트를 사용하는 것이다.
->이 방법은 프로그램이 쉽지만 실행 시간이 길다
->새로운 파일을 생성하기 위해 먼저 디렉터리를 탐색하여 같은 이름의 존재 여부 확인 후 끝 부분에 새로운 항목을
첨가한다.
->파일을 삭제 하려면 디렉터리에서 이름을 찾아 해당된 공간을 방출시킨다

*해시 테이블
-파일 이름을 제시하면 해시로부터 값을 얻어서 그것을 포인터로 활용하여 리스트에 직접 접근할 수 있다.
-> 디렉터리 탐색 시간을 상당히 개선할 수 있다.
-> 충돌이 일어날 수 있다. (두 개의 파일이 같은 위치로 해시하는 상황)
단점: 해시 테이블이 고정된 크기를 갖는다
->해시 테이블의 크기에 따라 해시 기능도 제한을 받는다.

할당 방법
-파일들을 어떻게 디스크 공간에 배치해야 효율적으로 사용할 수 있고, 파일들을 빨리 접근할 수 있는가 하는 것.
*연속 할당
-각 파일을 디스크의 선형적으로 연속된 기억 공간을 할당한다.
장점: 파일 접근 시간이 빠름, 순차 접근과 직접접근이 가능
단점: 외부 단편화 발생

*연결 할당
-각 파일은 디스크 블록의 연결 리스트이고 디스크 블록은 디스크의 어느 곳에도 산재할 수 있다.
장점: 외부 단편화가 발생하지 않음
단점: 파일에 대한 순차접근만 가능 (연결리스트를 따라서)

*색인 할당
-디스크의 한 블록에 파일의 나머지 블록에 대한 포인터를 유지
장점: 연결 할당의 문제점인 직접 접근 불가능 문제를 해결
단점: 연결 할당에 비해 공간 낭비가 심함

디스크 자유 공간 관리(Free-Space Management)
-디스크의 공간은 제한되어 있기 때문에 삭제된 파일들이 차지하던 공간을 새로운 파일들을 위하여 다시 재사용하여야 한다. 시스템은 이러한 디스크 자유 공간 관리로 유지하고 관리한다.
비트 벡터
-자유 공간 리스트는 흔히 비트 맵 또는 비트 벡터 로써 구현 된다. 여기서 각 블록은 1비트로 표현된다.
->블록이 자유로우면 비트는 1, 블록이 할당되어 있으면 비트는 0
장점: 첫 번째 빈 블록 찾기 쉬움
단점: 디스크 크기가 큰 경우 주기억장치 부담이 큼
연결 리스트(Linked list)
-모든 자유 디스크 블록들을 함께 연결시키는 것인데 첫 번째 자유 블록은 다음 자유 블록을 가리키는 포인터를 가진다. 두 번째 자유 블록은 다음 자유 블록의 포인터를 가지고 계속 그런 방법으로 구현 된다.

복구
-파일과 디렉터리는 때에 따라서 디스크와 주 메모리 두 곳에 존재하게 되기 때문에 시스템 고장으로
인하여 데이터 손실이나 데이터 간의 불일치가 생기지 않는다는 것을 보장하기 위한 노력을 해야 한다.
일관성 검사
-디렉터리 구조에 있는 데이터와 디스크에 있는 데이터 블록을 비교하고 불일치가 발견되면 그것을 정정하려고 시도한다.
백업과 복구
-자기디스크는 때때로 고장을 일으키기도 하고 디스크 고장은 데이터를 잃어버리게 할 수 있으므로 이때 자료가 영원히 손실되지 않도록 보장해 줄 필요가 있다.
->다른 저장장치에 백업
NFS
->네트워크를 통한 파일 공유
-SunOS 나 Solaris 에서 제공하는 근거리/원거리 파일 접근 시스템
-클라이언트-서버 관계를 기반으로 함
목적: 파일 시스템들 사이에서 일정 수준의 공유를 투명하게 허용하는 것이다.
NFS 프로토콜
-원격 파일 연산을 위한 RPC(Remote Procedure Call)를 제공한다.
-> 아래의 연산들을 지원한다.
-디렉터리 내의 파일 검색
-디렉터리 항목 집합 읽기
-링크와 디렉터리들의 조작
-파일 속성의 접근
-파일 읽기와 쓰기
'CS > 운영체제' 카테고리의 다른 글
보안 (0) | 2019.04.09 |
---|---|
주 메모리 & 가상 메모리 (0) | 2019.03.29 |
보안 Security (0) | 2019.03.29 |
운영체제 구조 (0) | 2019.01.21 |
운영체제 서론2 (0) | 2019.01.11 |