'이론/운영체제'에 해당되는 글 6건

01 데이터 통신

 

1) 데이터 통신

 

데이터 통신은 컴퓨터의 발달을 배경으로 하여 생겨난 것으로, 컴퓨터와 각종 통신 기기 사이에서 디지털 형태로 표현된 2진 정보를 송수신 하는 것을 말한다.

 

* 데이터 통신 = 데이터 전송 기술 + 데이터 처리 기술

 

2) 정보통신

 

정보통신은 컴퓨터와 통신 기술의 결합에 의해 통신처리 기능과 정보처리기능을 합한것

 

3) 통신의 3요소

 

1. 정보원

2. 수신원

3. 전송 매체

 

02 데이터 통신 시스템의 기본 구성

 

1) 데이터 통신 시스템의 기본 구성

 

 

 

- 단말장치

 

단말장치는 데이터 통신 시스템과 외부 사용자의 접속점에 위치하여 최종적으로 데이터를 입*출력하는 장치이다.

 

- 신호 변환장치

 

신호 변환장치는 컴퓨터나 단말장치의 데이터를 통신 회선에 적합한 신호로 변경하거나, 통신 회선의 신호를 컴퓨터나 단말장치에 적합한 데이터로 변경하는 신호 변환 기능을 수행한다.

 

- 통신회선

 

통신 회선은 단말장치에 입력된 데이터 또는 컴퓨터에서 처리된 결과가 실질적으로 전송되는 선로이다.

 

- 통신 제어장치

 

통신 제어장치는 데이터 전송 회선과 주 컴퓨터를 연결하는 장치이다.

 

- 통신 제어 프로그램

 

통신 제어 프로그램은 데이터 전송 회선과 통신 제어장치를 이용하여 컴퓨터와 단말장치 간의 데이터를 송수신하기 위해 사용되는 프로그램을 총칭합니다.

 

데이터 송*수신 : 컴퓨터와 단말장치에 내장된 통신 소프트웨어를 통해 정확한 데이터 송수신 수행

통신 하드웨어 제어 : 통신 하드웨어를 제어하는 드라이버를 통한 제어 수행

이용자 인터페이스 제어 : 사용자에게 데이터의 입*출력에 관한 절차를 제공하여, 사용자로 하여금 통신 관련 동작을 지시할 수 있게 하는 기능

 

 

 

 

03 통신회선

 

 

1) 유선매채

 

- 꼬임선(Twisted Pair Wire) 

 

꼬임선은 전기적 간섭 현상을 줄이기 위해 균일하게 서로 감겨있는 형태의 케이블이다.

 

* 가격이 저렴하고, 설치가 간편하다

* 거리, 대역폭, 데이터 전송률 면에서 제약이 많다.

* 다른 전기적 신호의 간섭이나 잡음에 영향을 받기가 쉽다.

* 최근에는 100Mbps이상의 전송속도가 가능한 꼬임선이 개발되어 짧은 거리에서는 고속전송이 가능하다

 

 

- 동축 케이블(Coaxial Cable)

 

동축 케이블은 중심 도체를 플라스틱 절연체를 이용하여 감싸고, 이를 다시 외부 도체를 이용하여 감싸는 형태로 구성된다.

 

* 주파수 범위가 넓어서 데이터 전송률이 높다.

* 꼬임선에 비해 외부 간섭과 누화의 영향이 적다.

* 신호의 감쇠 현상을 막기위해 일정 간격마다 중계기를 설치해야 한다,

(아날로그 전송에서는 증폭기, 디지털 전송에서는 리피터를 이용하여 새로운 신호 생성)

* 아날로그와 디지털 신호 전송에 모두 사용한다.

* 고주파 특성이 양호하며, 광대역 전송에 적합하다.

* CATV, 근거리 통신망, 장거리 전화 등에 다양하게 사용된다.

 

- 광섬유 케이블(Optical Fiber Cable)

 

유리를 원료로 하여 제작된 가느다란 광섬유를 여러 가닥 묶어서 케이블의 형태로 만든것, 광 케이블

 

* 데이터를 전기 신호가 아닌 빛으로 바꾸어 빛의 전반사 원리를 이용하여 전송.

* 가늘고 가벼워 취급이 용이하며, 도청하기 어려워 보안성이 뛰어나다

* 넓은 대역폭을 제공함으로 데이터의 전송률이 높고, 대용량, 장거리 전송이 가능하다.

* 감쇠율이 적어 리피터의 설치 간격이 넓으므로 리피터의 소요가 적다.

* 설치 비용이 비싸지만 리피터의 소요가 적고, 대용량 전송이 가능하여 단위 비용은 저렴하다.

 

2) 무선 매체

 

- 라디오 파

 

라디오파는 통신 장비의 이동이 빈번하고 통신 회선을 이용하기 어려운 지역 간의 통신에 이용하도록 무선 주파수를 사용하는 방식이다.

 

* 주로 장거리 통신 서비스에 이용되며, 동축 케이블이나 광섬유 케이블의 대용으로 TV나 휴대폰 등의 음성 전송에 이용된다.

* 감쇠율이 적어 동축 케이블에 비해 중계기가 훨씬 적게 든다.

 

- 위성 마이크로파

 

위성 마이크로파는 지상에서 쏘아올린 마이크로 주파수를 통신 위성을 통해 변환, 증폭한 후 다른 주파수로 지상에 송신하는 방식으로, 위성 통신에 사용된다.

 

* 위성 통신 시스템은 통신 위성, 지구국, 채널로 구성된다.

* 대역폭이 넓어 고속, 대용량 통신이 가능하고, 통신 비용이 저렴하다.

* 오류율이 적어 고품질의 정보 전송이 가능하다.

* 한 대의 통신 위성은 지구 표면의 약 1/3 이상을 커버할 수 있으므로, 통신 범위가 넓다.

* 다중 접속 방식 : 위성 통신 시스템에서는 하나의 통신 위성에 여러 개의 지구국이 접속하여 사용하므로, 통신 위성을 공동으로 사용하기 위한 다중 접속 방식이 필요하다. 다음은 다중 접속 방식에 대한 설명이다.

 

- FDMA : 주파수 대역을 일정 간격으로 분할하는 방식

- TDMA : 사용시간을 분할하는 방식

- CDMA : 주파수나 시간을 모두 공유하면서 각 데이터에 특별한 코드를 부여하는 방식

 

 

02 통신 제어장치

 

통신 제어장치는 데이터 전송 회선과 주컴퓨터 사이에 위치하여, 컴퓨터가 데이터 처리에 전념할 수 있도록 컴퓨터를 대신해 데이터 전송에 관한 전반적인 제어 기능을 수행한다.

 

1) 기능

 

- 전송제어

- 동기 및 오류 제어

- 그 밖의 기능

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

01 파일과 파일시스템

 

1) 파일디스크립터

 

파일을 관리하기 위한 시스템이 필요로 하는 파일에 대한 정보를 갖고 있는 제어 블록을 의미하며, 파일 제어 블록이라고도 한다.

 

* 파일 디스크립터는 파일마다 독립적으로 존재하며, 시스템에 따라 다른 구조를 가질 수 있다.

 

* 보통 파일 디스크립터는 보조기억장치 내에 저장되어 있다가 해당 파일이 Open 될때 주기억장치로 옮겨진다.

 

 

 

02 파일 구조

 

1) 순차파일

 

순차파일은 레코드를 논리적인 처리 순서에 따라 연속된 물리적 저장공간에 기록하는 것을 의미한다.

 

순차 접근 방식이라고도 한다.

 

장점 : 파일의 구성이 용이하고, 순차적으로 읽을 수 있으므로 기억공간의 이용효율이 높다.

 

단점 : 파일에 새로운 레코드를 삽입하거나 삭제하는 경우 파일 전체를 복사한 후 수행해야 하므로 시간이 많이 걸린다.

 

파일의 특정 레코드를 검색하려면 순차적으로 모든 파일을 비교하면서 검색해야 하므로 검색 효율이 낮다.

 

 

2) 직접 파일

 

직접 파일은 파일을 구성하는 레코드를 임의의 물리적 저장공간에 기록하는 것으로 직접 접근 방식이라고도 한다.

 

* 레코드에 특정 기준으로 키가 할당되며, 해싱함수를 이용하여 이 키에 대한 보조기억장치의 물리적 상대 레코드 주소를 계산한 후 해당하는 주소에 레코드를 저장한다.

 

* 레코드는 해싱 함수에 의해 계산된 물리적 주소를 통해 접근할 수 있다.

 

3) 색인 순차 파일

 

* 색인을 이용한 순차적인 접근 방법을 제공하여 색인 순차 접근 방식이라고도 한다.

 

* 각 레코드를 키 값 순으로 논리적으로 저장하고, 시스템은 각 레코드의 실제 주소가 저장된 색인을 관리한다.

 

* 레코드를 참조하려면 색인을 탐색한 후 색인이 가리키는 포인터를 사용하여 참조할 수 있다.

 

기본영역, 색인 영역, 오버플로 영역

 

장점 - 순차처리와 임의처리 모두 가능

 

단점 - 색인 영역이나 오버플로 영역을 설정해야 하므로 기억공간이 필요하다.

 

 

02 디렉터리의 구조

 

1) 트리 디렉터리 구조

 

트리 디렉터리는 하나의 루트 디렉터리와 여러 개의 종속 디렉터리로 구성된 구조이다.

 

2) 비순환 그래프 디렉터리 구조

 

비순환 그래프 디렉터리는 하위 파일이나 하위 디렉터리를 공동으로 사용할 수 있는 것으로, 사이클이 허용되지 않는 구조이다.

 

* 디스크 공간을 절약할 수 있다.

* 하나의 파일이나 디렉터리가 여러 개의 경로 이름을 가질 수 있다.

* 디렉터리 구조가 복잡하고, 공유된 하나의 파일을 탐색할 경우 다른 경로로 두 번 이상 찾아갈 수 있으므로 시스템 성능이 저하될 수 있다.

* 공유된 파일을 삭제할 경우 고아 포인터가 발생할 수 있다.

 

3) 일반적인 그래프 디렉터리 구조

 

일반적인 그래프 디렉터리는 트리 구조에 링크를 첨가시켜 순환(cycle)을 허용하는 그래프 구조이다.

 

* 디렉터리와 파일 공유에 완전한 융통성이 있다.

* 탐색 알고리즘이 간단하여, 파일과 디렉터리를 액세스하기가 쉽다.

 

 

 

03 디스크 공간 할당 방법

 

1) 연속할당

 

연속 할당은 파일을 디스크의 연속된 기억공간에 할당하는 방법으로, 생성되는 파일 크기만큼의 공간이 있어야 한다.

 

* 논리적으로 연속된 레코드들이 물리적으로 인접한 공간에 저장되기 때문에 접근 시간이 빠르다.

* 디렉터리는 파일의 시작 주소와 길이에 대한 정보만 가지고 있으므로 디렉터리가 단순하고, 관리 및 구현이 용이하다.

* 파일 크기에 알맞은 연속 공간이 없을 경우 파일이 생성되지 않는다.

* 파일의 생성과 삭제가 반복되면서 단편화가 발생한다.

* 단편화를 줄이기 위해 재배치에 의한 주기적인 압축이 필요하다.

 

 

2) 불연속 할당

 

2-1) 섹터 단위 할당

 

* 섹터 단위 할당은 하나의 파일이 디스크의 섹터 단위로 분산되어 할당되는 방법으로 하나의 파일에 속하는 섹터들이 연결리스트로 구성되어 있다.

 

* 하나의 파일에 속하는 각각의 섹터는 연결을 위해 다음 내용이 있는 곳의 포인터를 가지고 있다.

 

* 디렉터리는 파일의 시작과 마지막 주소에 대한 정보만 가지고 있다.

 

* 섹터 단위로 저장되므로 디스크의 단편화가 발생되지 않고, 디스크 압축이 불필요하다.

 

* 파일 생성시 파일 크기를 알 필요가 없으며, 파일 크기만큼의 연속된 공간이 없어도 저장이 가능하다.

 

 

 

2-2) 블록 단위 할당

 

블록 단위 할당은 하나의 파일이 연속된 여러 개의 섹터를 묶은 블록 단위로 할당되는 방법이며 블록 체인 할당, 색인 블록 체인 할당, 블록 지향 파일 사상 기법이다.

 

- 블록 체인 기법

 

 

 

* 블록 체인 기법은 섹터 단위 할당 기법과 비슷하나 할당 단위를 블록 단위로 구성하는 방법이다.

* 하나의 블록은 여러 개의 섹터로 구성되어 있다.

* 디렉터리는 파일의 첫 번째 블록을 가리키는 포인터를 가지고 있다.

* 하나의 블록은 데이터와 다음 블록을 가리키는 포인터로 구성되어 있다.

 

- 색인 블록 체인 기법

 

* 색인 블록 체인 기법은 파일마다 색인 블록을 두고, 파일이 할당된 블록의 모든 포인터를 이 색인 블록에 모아 둠으로써 직접 접근을 가능하게 한 방법이다.

 

* 색인 블록 하나로 파일을 전부 나타낼 수 없는 경우 여러 개의 연속된 색인 블록을 서로 링크하여 사용할 수 있다.

 

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

01 기억장치 관리 개요

 

 

1) 기억장치 계층 구조

 

레지스터 <- 캐시 기억장치 <- 주기억 장치 <- 보조기억 장치

 

2) 기억장치의 관리 전략

 

- 반입(Fetch) 전략

 

보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략이다.

 

요구 반입 : 실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법

예상 반입 : 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 에상하여 적재

 

- 배치전략

 

최초적합(첫 번째 분할 영역에 배치), 최적 적합(빈 영역중에 단편화를 가장 작게 남기는 분할 영역에 배치)

, 최악적합(빈 영역중에 단편화를 가장 많이 남기는 분할영역에 배치)

 

- 교체전략

 

FIFO, OPT, LRU, LFU, NUR, SCR 등이 있다.

 

02 주기억장치 할당 기법

 

1) 연속할당 기법

 

프로그램을 주기억장치에 연속으로 할당하는 기법으로, 단일 분할 할당 기법과 다중 분할 할당 기법이 있다.

 

단일 분할 할당 기법 : 오버레이, 스와핑

다중 분할 할당 기법 : 고정 분할 할당 기법, 동적 분할 할당 기법

 

 

1-1) 단일 분할 할당

 

단일 분할 할당 기법은 주기억장치를 운영체제 영역과 사용자 영역으로 나누어 한 순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용하는 기법이다.

 

* 가장 단순한 기법

* 운영체제 영역과 사용자 영역을 구분하는 경계 레지스터가 사용된다.

* 초기에는 주기억장치보다 큰 사용자 프로그램은 실행할 수 없었으나 오버레이 기법을 사용하면서 이 문제가 해결되었다.

 

- 오버레이 기법

 

오버레이 기법은 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법이다.

 

* 보조기억장치에 저장된 하나의 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 차례로 주기억장치에 적재하여 프로그램을 실행한다.

 

* 프로그램이 실행되면서 주기억장치의 공간이 부족하면 주기억장치에 적재된 프로그램의 조각 중 불필요한 조각이 위치한 장소에 새로운 프로그램의 조각을 중첩(overlay)하여 적재한다.

 

* 프로그램을 여러 개의 조각으로 분할하는 작업은 프로그래머가 수행해야 하므로 프로그래머는 시스템 구조나 프로그램 구조를 알아야 한다.

 

- 스와핑 기법

 

스와핑 기법은 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법이다.

 

* 주기억장치에 있는 프로그램이 보조기억장치로 이동되는 것을 Swap Out, 보조기억장치에 있는 프로그램이 주기억장치로 이동되는 것을 Swap In이라고 한다.

 

* 가상메모리 페이징 기법으로 발전되었다.

 

1-2) 다중 분할 할당 기법

 

1-2-1) 정적할당

 

주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비상태 큐에서 준비중인 프로그램을 각 영역에 할당하여 수행하는 기법이다.

 

1-2-2) 동적할당

 

고정 분할 할당 기법의 단편화를 줄이기 위한 것으로, 미리 주기억장치를 분할해 놓는 것이 아니라 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분할 하는 기법이다.

 

 

2) 분산 할당 기법

 

프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당하는 기법으로, 페이징 기법과 세그먼테이션 기법으로 나눌 수 있다.(가상메모리기법)

 

 

03 주기억장치 관리 기법의 문제점과 해결 방법

 

1) 단편화

 

- 내부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 크기 때문에 프로그램이 할당된 후 사용되지 않고 남아 있는 빈 공간

 

- 외부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 작기 때문에 프로그램이 할당될 수 없어 사용되지 않고 빈공간으로 남아 있는 분할된 전체 영역

 

 

2) 단편화 해결방법

 

- 통합 기법

 

통합 기법은 주기억장치 내에 인접해 있는 단편화된 공간을 하나의 공간으로 통합하는 작업을 의미한다.

 

- 압축 기법

 

주기억장치 내에 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 가용 공간을 만드는 작업을 의미한다.

가비지 콜렉션이라고도 한다.

 

가비지 콜렉션후 분할영역 주소를 새롭게 지정해줘야 하는데, 이를 기억장소의 relocation이라고 한다.

 

 

04 가상메모리

 

 

1) 가상메모리

 

페이징 기법 - 프로그램을 동일한 크기로 나눈 단위를 페이지라 하며 이 페이지를 블록으로 사용하는 기법

 

세그먼테이션 기법 - 프로그램을 가변적인 크기로 나눈 단위를 세그먼트라 하며, 이 세그먼트를 블록으로 사용하는 기법

 

 

1-1) 페이징 기법

 

- 프로그램을 일정한 크기로 나눈 단위를 페이지라고 하고, 페이지 크기로 일정하게 나누어진 주기억장치의 단위를 페이지 프레임이라고 한다.

 

- 외부 단편호는 발생하지 않으나 내부 단편화는 발생할 수 있다.

 

- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 테이블이 필요하다.

- 페이지 맵 테이블 사용으로 비용이 증가되고, 처리속도가 감소한다.

 

가상주소 형식  =  페이지번호 + 변위값

 

 

실기억주소 형식  = 페이지 프레임 + 변위값

 

 

페이지 테이블 = 디스크 주소 + 페이지 프레임 번호 + 상태비트

 

주소 변환 순서

 

1. 가상주소의 페이지 번호에 해당하는 페이지 프레임 번호와 가상주소의 변위값을 이용하여 실기억주소를 만든다.

 

2. 만들어진 실기억주소를 이용하여 주기억장치를 액세스한다.

 

 

 

 

페이지 폴트 ?

 

페이지 폴트란 프로그램 실행 시 참조한 페이지가 주기억장치에 없는 현상을 의미한다.

페이지 폴트 현상이 발생하면 다음과정에 따라 페이지 부재 현상을 처리한다.

 

페이지 폴트 발생시 처리 순서

 

1. 운영체제에서 트랩 요청 - > 2. 사용자 레지스트리와 프로그램의 상태저장 -> 현재 사용가능한 페이지를 페이지 맵 테이블에서 검색

-> 가상기억장치에 있는 페이지를 주기억장치로 가져옴 -> 페이지 맵 테이블 갱신 -> 프로그램 상태를 불러와 계속 작업을 진행함

 

 

1-2) 세그먼테이션 기법

 

* 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법이다.

 

* 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트라고 하며, 각 세그먼트는 고유한 이름과 크기를 갖는다.

 

* 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법이다.

 

* 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블이 필요하다.

 

 

세그먼테이션 기법의 일반적인 주소 변환

 

 

세그먼트 + 페이징

 

 

 

 

05 페이지 교체 알고리즘

 

1) OPT

 

OPT는 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법이다. 미래예측. 

 

2) FIFO

 

FIFO는 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법이다.

 

3) LRU

 

LRU는 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다.

 

4) LFU 

 

LFU는 사용 빈도가 가장 적은 페이지를 교체하는 기법이다.

 

5) NUR

 

NUR은 LRU와 비슷한 알고리즘으로, 최근에 사용하지 않은 페이지를 교체하는 기법이다.

 

NUR은 참조 비트와 변형 비트가 필요한 교체 알고리즘이다. NUR 하면 참조 비트와 변형 비트를 기억하고, 참조 비트와 변형 비트에 따른 교체 우선순위를 기억하자.

 

참조 비트 : 페이지가 호출되지 않았을 때는 0, 호출되었을 때는 1로 지정된다.

변형 비트 : 페이지 내용이 변경되지 않았을 때는 0, 변경되었을 때는 1로 지정된다.

 

6) SCR(Second Chance Replacement)

 

SCR은 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로, FIFO기법의 단점을 보완하는 기법이다.

 

* 각 페이지마다 참조 비트를 두고, FIFO 기법을 이용하여 페이지 교체 수행중 참조 비트가 0일 경우에는 교체하고, 참조 비트가 1일 경우에는 참조 비트를 0으로 지정한 후 FIFO리스트의 맨 마지막으로 피드백시켜 다음 순서를 기다리게 한다.

 

* 교체 대상이 되기 전에 참조 비트를 검사하여 1일 경우 한 번의 기회를 더 부여하기 때문에 Second Chance 라고도 한다.

 

 

06 가상기억장치 기타 관리 사항

 

1) 페이지 크기

 

- 페이지 크기가 작을 경우

 

페이지 단편화가 감소되고 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어든다.

국부성에 더 일치할 수 있기 때문에 기억장치 효율이 높아진다.

 

- 페이지 크기가 클 경우

 

페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라진다.

디스크 접근 횟수가 줄어들어 전체적인 입*출력의 효용성이 증가된다.

 

 

2) 국부성(Locality)

 

Locality는 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론이다.

 

* 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 되었다.

 

* 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상기억장치 관리의 이론적인 근거가 된다.

 

* 캐시메모리 시스템의 이론적 근거이다.

 

3) Locality의 종류

 

- 시간구역성

 

* 시간 구역성은 프로세스가 실행되면서 하나의 페이지를 일정시간 동안 집중적으로 액세스하는 현상이다.

 

* 한번 참조한 페이지는 가까운 시간 내에 게속 참조할 가능성이 높음을 의미한다.

 

- 공간구역성

 

* 공간 구역성은 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상이다.

* 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미한다.

 

4) 워킹 셋

 

워킹 셋은 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합이다.

 

- 프로그램의 Locality의 특징

 

- 자주 참조되는 워킹 셋을 주기억장치에 상주 시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정된다.

 

5) 페이지 폴트 빈도 방식

 

페이지 폴트 빈도 PFF(Page Fault Frequency)는 페이지 부재가 일어나는 횟수를 의미한다.

 

* 페이지 폴트 빈도 방식은 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식이다.

 

6) 프리페이징

 

* 프리페이징은 처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 기법이다.

 

6) 스래싱

 

스래싱은 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상이다.

 

* 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정중 자주 페이지 부재가 발생함으로써 나타나는 현상으로, 전체 시스템의 성능이 저하된다.

 

* 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소하게 된다.

 

 

 

07 디스크 스케쥴링

1) 디스크 스케줄링의 개요

 

* 디스크 스케줄링은 사용할 데이터가 디스크 상의 여러 곳에 저장되어 있을 경우 데이터를 액세스하기 위해 디스크 헤드가 움직이는 경로를 결정하는 기법이다.

 

* 디스크 스케줄링은 일반적으로 탐색 시간을 최적화하기 위해 수행되며, 다음과 같은 목적을 갖고 있다.

 

처리량 최대화, 응답 시간 최소화, 응답 시간 편차의 최소화

 

2) fcfs

 

디스크 대기 큐에 가장 먼저 들어온 트랙에 대한 요청을 먼저 서비스하는 기법이다.

 

3) sstf

 

sstf는 탐색거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스하는 기법이다.

 

4) scan

 

scan은 sstf가 갖는 탐색 시간의 편차를 해소하기 위한 기법이다.

 

* 현재 헤드의 위치에서 진행 방향이 결정되면 탐색 거리가 짧은 순서에 따라 그 방향의 모든 요청을 서비스하고,

끝까지 이동한 후 역방향의 요청 사항을 서비스한다.

 

5) c-scan

 

c-scan은 항상 바깥쪽에서 안쪽으로 움직이면서 가장 짧은 탐색 거리를 갖는 요청을 서비스하는 기법이다.

 

* 헤드는 트랙의 바깥쪽에서 안쪽으로 한 방향으로만 움직이며 서비스하여 끝까지 이동한 후, 안쪽에 더 이상의 요청이 없으면

헤드는 가장 바깥쪽의 끝으로 이동한 후 다시 안쪽으로 이동하면서 요청을 서비스한다.

 

 

6) n-step scan

 

n-step scan은 scan 기법의 무한 대기 발생 가능성을 제거한 것으로, 어떤 방향의 진행이 시작될 당시에 대기 중이던 요청들만 서비스하고, 진행 도중 도착한 요청들은 한데 모아서 다음의 반대 방향 진행 때 서비스하는 기법이다.(scan방식은 진행 도중 도착한 요청도 서비스 한다)

 

* sstf나 scan 기법보다 응답 시간의 편차가 적다.

 

7) 에션바흐 기법

 

* 헤드는 c-scan처럼 움직이며 예외적으로 모든 실린더는 그 실린더에 요청이 있던 없던 간에 전체 트랙이 한 바퀴 회전할 동안에 서비스를 받는다.

 

8) sltf

 

섹터 큐잉이라고 하며 회전 지연 시간의 최적화를 위해 구현된 기법이다.

 

* 디스크 대기 큐에 있는 여러 요청을 섹터 위치에 따라 재정렬하고, 가장 가까운 섹터를 먼저 서비스한다.

 

* 헤드의 이동이 거의 없는 고정 헤드 장치인 드럼과 같은 장치에서 사용된다.

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

01 프로세스 개요

 

1) 프로세스의 정의

 

실행중인 프로그램

 

2) pcb(프로세스 제어블록)

 

저장정보

 

1) 프로세스의 현재 상태(준비, 대기, 실행 등의 프로세스 상태)

2) 포인터( 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터)

3) 프로세스 고유 식별자( 프로세스를 구분할 수 있는 고유번호)

4) 스케줄링 및 프로세스의 우선순위

 

3) 프로세스 상태 전이

 

 

 

4) 스레드

 

스레드는 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위이다.

 

스레드의 분류

 

사용자 수준의 스레드

커널 수준의 스레드

 

스레드 사용의 장점

 

- 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성 증진

- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상

- 응용 프로그램의 응답 시간을 단축

- 스레드는 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신한다.

 

02 스케줄링 개요

 

 

1) 개요

 

대부분의 시스템은 다중 프로그래밍 방식으로 동작하는데 이는 여러 개의 프로세스를 주기억장치에 적재하여 실행 중이던 프로세스가 중앙처리장치 동작이 아닌 다른 사건이 발생하기를 기다리는 동안 다른 프로세스가 실행되도록 하여 중앙처리장치 이용률을 최대화하는 개념이다.

 

2) 스케줄링 기법

 

비선점 스케줄링

 

이미 할당된 cpu를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법이다.

 

선점 스케줄링

 

하나의 프로세스가 cpu를 할당받아 실행할 때 우선순위가 높은 다른 프로세스가 cpu를 강제로 빼앗아 사용할 수 있는 스케줄링 기법이다.

 

3) 비선점 스케줄링

 

- FCFS 준비상태 큐에 도착한 순서에 따라 차례로 cpu할당 하는 기법

 

- SJF

 

SJF는 준비상태 큐에서 기다리고 있는 프로세스들 중에서 실행시간이 가장짧은 프로세스에게 cpu할당

 

- HRN

 

실행 시간이 긴 프로세스에 불리한 SJF 기법 보완

 

우선순위 =  (대기시간+서비스시간) / 서비스시간

 

우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은 순으로 우선순위가 부여된다.

 

- 우선순위 스케줄링

 

프로세스마다 우선순위를 부여하여 그 우선순위가 가장 높은 프로세스에게 먼저 cpu 할당

가장 낮은 순위를 부여받은 프로세스는 기아 상태가 발생 하여 aging해야 함.

 

4) 선점 스케줄링

 

- 선점 우선순위

 

우선순위 스케줄링과 동일하나, 선점할 수 있다는 차이

 

- SRT

 

선점가능한 SJF

 

- RR(라운드 로빈)

 

시분할 시스템을 위해 고안된 방식

 

FCFS 기법과 같이 준비상태 큐에 먼저 들어온 프로세스가 먼저 cpu를 할당받지만, 시간 할당량 동안만 실행한 후 실행이 완료되지 않으면 다음 프로세스에게 cpu를 넘겨주고 준비상태 큐의 가장 뒤로 배치된다.

 

- 다단계 큐

 

프로세스를 특정 그룹으로 분류할 수 있을 경우 그룹에 따라 각기 다른 준비상태 큐를 사용하는 기법이다.

 

프로세스 우선순위에 따라 시스템 프로세스, 대화형 프로세스, 편집 프로세스, 일괄 처리 프로세스 등으로 나누어 준비상태 큐를 상위, 중위, 하위 단계로 배치한다.

 

각 준비상태 큐는 독자적인 스케줄링을 가지고 있으므로 각 그룹의 특성에 따라 서로 다른 스케줄링 기법을 사용할 수 있다.

 

- 다단계 피드백 큐

 

특정 그룹의 준비상태 큐에 들어간 프로세스가 다른 준비상태 큐로 이동할 수 없는 다단계 큐 기법을 준비상태 큐 사이를 이동할 수 있도록 개선한 기법이다.

 

준비상태 큐마다 시간 할당량을 부여하여 그 시간 동안 완료하지 못한 프로세스는 다음 단계의 준비상태 큐로 이동된다.

 

상위 단계 준비상태 큐일수록 우선순위가 높고, 시간 할당량이 적다.

 

 

03 병행프로세스와 상호 배제

 

 

 

1) 병행 프로세스

 

두 개 이상의 프로세스들이 동시에 존재하며 실행 상태에 있는 것을 의미한다.

 

2) 임계 구역

 

임계 구역은 다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유하는 데이터 및 자원에 대하여 어느 한 시점에서는 하나의 프로세스만 자원을 사용하도록 지정된 공유 자원을 의미한다.

 

* 임계 구역에는 하나의 프로세스만 접근할 수 있으며, 해당 프로세스가 자원을 반납한 후에만 다른 프로세스가 자원이나 데이터를 사용할 수 있다.

 

* 임계 구역은 특정 프로세스가 독점할 수 없으며, 임계 영역에서 수행 중인 프로세스는 인터럽트가 불가능하다.

 

* 프로세스가 임게 구역에 대한 집입을 요청하면 일정 시간 내에 진입을 허락해야 한다.

 

3) 상호 배제 기법

 

상호 배제는 특정 프로세스가 공유 자원을 사용하고 있을 경우 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법을 의미한다.

 

* 여러 프로세스가 동시에 공유 자원을 사용할 때 각 프로세스가 번갈아가며 공유자원을 사용하도록 하는 것으로, 임계구역을 유지하는 기법이다.

 

소프트웨어적 구현 방법

 

* 두 개의 프로세스 기준 : 데커 알고리즘, 피터슨 알고리즘

* 여러개의 프로세스 기준 : Lamport의 빵집 알고리즘

 

하드웨어적 구현 방법

 

* Test & Set 기법과 Swap 명령어 기법이 있다.

 

4) 동기화 기법

 

동기화 기법은 두 개 이상의 프로세스를 한 시점에서는 동시에 처리할 수 없으므로 각 프로세스에 대한 처리 순서를 결정하는 것으로, 상호 배제의 한 형태이다.

 

- 세마포어

 

* 세마포어는 '신호기', '깃발'을 뜻하며, 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법이다.

* 세마포어는 다익스트라가 제안하였으며, p와 v라는 두개의 연산에 의해서 동기화를 유지시키고 상호 배제의 원리를 보장한다.

 

* S는 P와 V연산으로만 접근 가능한 세마포어 변수로, 공유 자원의 개수를 나타내며 0과 1혹은 0과 양의 값을 가질 수 있다.

 

P연산 : while s<=0 do skip;  s =s -1  (자원이 점유중이면 기다리다가 사용할 수있으면 점유한다)

 

v연산 : s=s+1;

 

1. 프로세스가 자원을 사용하려고 할 경우 세마포어 변수를 통해 다른 프로세스가 자원을 점유하고 있는지 조사한다. 자원을 사용할 수

있으면 해당 자원을 점유한 후 자원이 점유되었다는 것을 알리고, 다른 프로세스가 이미 자원을 점유한 상태라면 자원을 사용할 수 있을 때까지 기다린다.

 

p연산 : 자원을 사용하려는 프로세스들의 진입 여부를 자원의 개수를 통해 결정하는 것으로 wait 동작이라 한다.

s = s-1; 자원 점유를 알리는 것으로, 자원의 개수를 감소시킨다.

 

2. 프로세스가 자원 사용을 마치면 자원을 반납하므로 자원의 사용을 위해 기다리는 프로세스에게 이 사실을 알린다.

 

v연산 : 대기중인 프로세스를 깨우는 신호로서 signal 동작이라고 한다.

s = s+1; 자원을 반납하였으므로 자원의 개수를 증가시킨다. 

 

 

- 모니터 

 

* 모니터는 동기화를 구현하기 위한 특수 프로그램 기법으로 특정 공유 자원을 프로세스에게 할당하는 데 필요한 데이터와 이 데이터를 처리하는 프로시저로 구성된다. 

 

* 모니터 내의 공유 자원을 사용하려면 프로세스는 반드시 모니터의 진입부를 호출해야 한다.

 

* 외부의 프로시저는 직접 액세스 할 수 없다.

 

* 모니터의 경계에서 상호 배제가 시행된다.

 

* 모니터에는 한 순간에 하나의 프로세스만 진입하여 자원을 사용할 수 있다.

 

* 모니터에서는 Wait와 Signal 연산이 사용된다.

 

 

 

04 교착상태

 

 

1) 교착상태 개요

 

- 교착상태(Dead Lock)은 상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상을 의미한다.

 

- 아래 그림과 같이 자동차들이 현재 위치한 길을 점유함과 동시에 다른 차가 사용하는 길을 사용하려고 대기하고 있지만 다른 길을 사용할 수 없으며 현재 길에서도 벗어나지 못하는 상태이다.

 

2) 교착상태 발생의 필요 충분 조건

 

교착상태가 발생하기 위해서는 다음의 네 가지 조건이 충족되어야 하는데, 이 네 가지 조건 중 하나라도 충족되지 않으면 교착상태가 발생하지 않는다.

 

상호 배제 - 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다.

 

점유와 대기 - 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.

 

비선점- 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.

 

환형 대기 - 공유 자원과 공유 자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다.

 

3)  교착상태 해결 방법

 

- 예방 기법

 

교착 상태 예방 기법은 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법으로, 교착상태 발생의 네 가지 조건 중에서 어느 하나를 제거함으로써 수행된다..

 

* 상호 배제 부정 - > 한번에 여러개의 프로세스가 공유자원을 사용할 수 있도록 한다.

 

* 점유 및 대기 부정 -> 프로세스가 실행되기 전 피요한 모든 자원을 할당하여 프로세스 대기를 없애거나 자원이 점유되지 않은 상태에서만 자원을 요구하도록 한다.

 

* 비선점 부정 -> 자원을 점유하고 있는 프로세스가 다른 자원을 요구 할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.

 

* 환형 대기 부정 -> 자원을 선형 순서로 분류하여 고유 번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한쪽 방향으로만 자원을 요구하도록 하는 것이다.

 

- 회피 기법

 

교착상태 회피 기법은 교착상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해나가는 방법으로, 주로 은행원 알고리즘이 사용된다.

 

* 은행원 알고리즘

 

* 은행원 알고리즘은 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데서 유래한 기법이다.

* 각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태를 안전상태, 교착상태가 발생할 수 있는 상태는 불안전 상태라고 한다.

* 은행원 알고리즘을 적용하기 위해서는 자원의 양과 사용자 수가 일정해야 한다.

* 은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간 안에 할당하는 것을 보장한다.

 

 

- 회복 기법

 

교착상태 회복 기법은 교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점*하여 프로세스나 자원을 회복하는 것을 의미한다.

 

프로세스 종료 - 교착상태에 있는 프로세스를 종료

 

자원 선점 - 교착상태의 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

01 시스템 소프트웨어

 

시스템 소프트웨어는 시스템 전체를 작동시키는 프로그램이다. 프로그램을 주기억 장치에 적재시키거나 인터럽트 관리 장치 관리 언어어 번역등을 담당한다.

 

분류 - 제어프로그램, 처리 프로그램

 

제어프로그램 - 시스템 전체의 작동 상태 감시, 작업의 순서 지정, 작업에 사용되는 데이터 관리

 

작업 제어 프로그램 예) job scheduler(프그램 실행 순서 정하고 준비), master scheduler(사용자가 명령을 입력한 후 엔터누르면 마스터 스케쥴러가 명령 받아들여 명령에 대한 프로그램 찾아 실행)

 

처리프로그램 - 제어 프로그램의 지시를 받아 사용자가 요구한 문제 해결

 

ex) 언어 번역 프로그램, 서비스 프로그램

 

02 운영체제 개념

 

컴퓨터시스템의 자원관리

 

컴퓨터개론 파트 참고

 

03 운영체제 운용 기법

 

1) 일괄처리 시스템

 

일정량 또는 일정기간 동안 데이터를 모아서 한꺼번에 처리하는 방식이다.

 

2) 다중 프로그래밍 시스템

 

다중 프로그래밍 시스템은 하나의 CPU와 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식이다.

 

3) 시분할 시스템

 

시분할 시스템은 여러 명의 사용자가 사용하는 시스템에서 주 컴퓨터가 사용자들의 프로그램을 번갈아가며 처리해 줌으로써 각 사용자에게 독립된 컴퓨터를 사용하는 느낌을 주는 것이다.

 

4) 다중 처리 시스템

 

여러개의 cpu와 하나의 주기억 장치를 이용하여 여러개의 프로그램을 동시에 처리하는 방식

 

5) 실시간 처리 시스템

 

실시간 처리 시스템은 데이터 발생 즉시, 또는 데이터 처리 요구가 있는 즉시 처리

 

6) 분산 처리 시스템

 

여러 개의 컴퓨터를 통신 회선으로 연결하여 하나의 작업을 처리하는 방식이다.

 

 

04 컴파일러와 인터프리터

 

저급언어 - 기계어, 어셈블리어(기게어와 1:1로 대응되는 기호)

 

고급언어(컴파일러 언어) 

 

1) 컴파일러와 인터프리터

 

- 컴파일러

 

컴파일러는 고급언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후 링킹작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성한다.

 

- 인터프리터

 

인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들어 번역하고 실행.

 

05 어셈블리어와 어셈블러

 

1)어셈블리어 개요

 

사용자가 이해하기 어려운 기계어 대신에 명령기능을 쉽게 연상할 수 있는 기호를 제공

 

어셈블리어 명령어 형식은 Label OP Operand 로 구성(명령코드, 피연산자)

 

Label은 데이터를 기억할 기억장소, 또는 분기할 위치, 기호 상수 등에 대한 기호를 기술하는 부분

 

2) 어셈블러와 어셈블 과정

 

어셈블러는 어셈블리어로 작성된 원시 프로그램을 기계어로 된 목적프로그램으로 어셈블하는 언어 번역 프로그램이다

 

 

06 매크로의 개념 및 특징

 

* 매크로는 프로그램 작성 시 한 프로그램 내에서 동일한 코드가 반복될 경우 반복되는 코드를 한 번만 작성하여 특정 이름으로 정의한 후 그 코드가 필요할 때마다 정의된 이름을 호출하여 사용하는 것이다.

 

* 매크로는 문자열 바꾸기와 같이 매크로 이름이 호출되면 호출된 횟수만큼 정의된 매크로 코드가 해당 위치에 삽입되어 실행된다.

 

* 사용자의 반복적인 코드 입력을 줄여준다.

 

07 컴파일러 링커 로더

 

컴파일러 - 고급언어를 컴퓨터가 인식할 수 있도록 기계어로 번역된 목적파일로 바꿔주는 것

링커 - 목적파일을 실핼가능 한 파일로 만들어 주는 프로그램

링킹 - 이때 여러개의 목적파일을 하나의 파일로 합치는 작업을 수행하여 실행프로그램을 만든다

로더 - 실행프로그램을 주기억 장치에 로드해서 실행하게 한다.

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요

고생 끝에 FAT방식의 파일시스템을 c언어 기반으로 제작하였다.


제작과정에서 문제점과 해결방안을 남긴다.

1. 처음에 파일시스템을 설계할 때 파일이 지워지면 디렉토리의 압축뿐만 아니라 FAT의 압축도 함께 일어나도록 하였다. 하지만 이렇게 되면 처음에 파일을 생성하고 지울 때 는 쉬울지 몰라도 디렉터리를 여러개 생성하고 그 디렉터리 안에 파일이 있는 경우 FAT에 여기저기 흩어져 있을 것이므로 매우 FAT을 재정렬하는 문제는 매우 어렵게 된다. 따라서 fragmentation을 허용하고 다시 파일이나 디렉토리가 생성될 때 fragmentation을 재활용하는 방식으로 수정하였다.

2. create_file 함수를 작성할 때 /* last_sector = 이 디렉토리의 맨 마지막 섹터*/

라는 주석을 보고 이해가 전혀 되지 않았다.

또한 while (FAT[last_sector] != (unsigned short)~0) 이해할 수 없었다.

많은 고민 끝에 last_sector는 현재 디렉토리에서 확장된 디렉터리의 섹터를 나타내는 것으로 보았다. 또한 (unsigned short)~0부분은 처음에 실행하여도 무한 루프를 돌았 다. 이것은 논리적으로 전혀 이해가 안되었고 (unsigned short)0으로 수정하였다.

이렇게 수정하면

while (FAT[last_sector] != (unsigned short)0) {

//(unsigned short)~0에서->(unsigned short)0으로 변경해야 확장된 디렉토리로 넘 어갈 수 있습니다.

last_sector = FAT[last_sector];

}

이러한 코드의 의미는 확장된 다음섹터로 넘어가는 의미가 된다.

3. write_file을 구현 할 때 mini_sh에서 루프를 돌면서 사이즈를 512씩 잘라서 넘겨준다.

이러한 방법도 좋지만 create_file함수에서 매개변수 f_size를 하나를 추가하여 아예 처음 파일을 생성할 때 파일의 속성에 사이즈를 설정하고 오픈파일 테이블에 복사해서 그것을 write_file이 이용하도록 변경하였다. 이렇게 되면 mini_sh의 루프도 사라지고 size를 한번에 넘겨주게 된다.

 

//fs_createfile함수에 파라미터를 추가하였다.

//예를 들어mkfile a 2000 이라고 쉘에 입력하면

//사이즈2000fs_createfile의 파라미터로 전달된다.

int fs_createfile(char *name,int f_size)

 

//파라미터로 전달된 파일의 사이즈를 할당해준다.

ep->size = f_size

//오픈파일 테이블에 복사한다.

open_file_table[fid].size= ep->size;

 

그리고 wrtie_file함수를 쓴다.(위의 3.알고리즘 참조).

 

 

4. remove_file함수를 만들 때 FAT을 변경하는 부분을 만드는 알고리즘을 구현하기가 어 려웠다. 또한 파일의 수가 8개의 n배수였다가 n-1배수로 변경되는 순간 디렉토리를 압 축하는 것도 상당히 애를 먹었다. FAT을 변경하는 것은 파일의 첫 번째 섹터로부터 while문을 따라가며 구현하는 알고리즘을 만들었고 디렉토리를 압축하는 것은

//확장된 디렉토리를 축소하는 함수이다.

void curtail_directory(int files_in_dir,int pre_sector) 이러한 함수를 구현함으로써

해결하였다. 인자에 pre_sector을 받음으로 FAT에서 현재 확장된 디렉토리 이전의 디 렉토리의 섹터를 구해내고 이를 수정하고 현재디렉토리도 함께 수정하는 방식.

 

//파일의첫번째섹터를index로받는다.

index=ep->first_sector;

 

/*FAT 테이블에서 삭제할 부분을 수정한다.

FAT연결고리를 따라가면서 수정한다.*/

while(FAT[index]){

int copy_index=index;

index=FAT[index];

FAT[copy_index]=(unsigned short)~0;

}

FAT[index]=(unsigned short)~0;

 

if((files_in_dir-1)%8==0){//파일의 개수가 8개의 배수가 되는 순간 다시 디렉토리를 축소시켜야한다.

curtail_directory(files_in_dir,cur_dir);//curtail_directory함수이용!

}

5. fs_rmdir을 구현할 때 디렉토리를 삭제하면 디렉토리 안의 파일을 추적하면서 파일을 삭제해주어야 한다. 이 부분은 구현할 수 있었다. 하지만 디렉토리안의 디렉토리는 어 떻게 해결할지 막막했다. 디렉토리안의 디렉토리가 있고 그안에 디렉토리가 있고 계속 있을텐데 이 디렉토리들 안의 파일들까지 다 제거하려면 어떻게 함수를 구현해야 하 는가? -> 재귀함수를 통하여 해결하였다. remove_directory 라는 함수를 통하여 현 재 디렉토리안의 파일과 디렉토리를 추적해나가면서 디렉토리이면 그 디렉토리의 첫 번째 섹터를 다시 remove_directory의 인자로 전달하여 recursive하게 계속 call하 도록 하였다.

6. fsck 파일일관성 검사를 inode가 없는 FAT파일 시스템에서 어떻게 구현해야 할지 고 민했다. 두가지 방식으로 파일 일관성 검사를 진행 하도록 하였다.

1. 블록검사

FAT할당테이블을 보고 사용중인 테이블은 BLOCK_IN_USE 배열에 1로 표시하고 사용중이지 않은 테이블은 FREE_BLOCK 배열에 1로 표시한다. 이 때 두 배열중 에 어느 하나는 1이고 어느 하나는 0이여야 한다. 이는 두 배열의 같은 위치의 원 소를 더해서 값이 1이 되는지 확인 함으로써 해결가능하다.

2. 파일검사

디스크를 읽어서 파일의 개수를 알아내고 이는 파일,디렉토리 생성삭제시 카운트되는 변수 fd_number와 비교된다. 이 두 값이 같으면 일관성이 있는 것이고 같지 않으면 파일시스템 오류이다.

 

7. log_area 구현

로그에 실행할 연산 정보를 기록하는 것까지는 문제가 없었다. 하지만 파일시스템이 크러쉬되고 다시 실행 됬을 때 로그정보 뿐만 아니라 전에 만들었던 파일 및 디렉토 리가 모두 복구가 되어야지 만이 로그에 저장된 삭제연산이 가능하다. 그런데 파일 및 디렉토리를 모두 복구하는 것은 종료하기 전에 이 시스템의 FAT정보와 디스크정보를 모두 파일로 남겨야 함을 뜻한다. 처음에는 atexit 함수를 통하여 종료할 때 파일로 정보를 남기도록 하고 다시 실행하면 복구가 되도록 하였다. 하지만 이렇게 하면 크러 쉬가 될 때 atexit는 실행되지 않으므로 이전의 파일 디렉토리 정보가 저장이 안된다. 크러쉬 될 때 실행되는 함수를 정의할 수 있는 함수는 없었다. 따라서 log정보만 파일 로 기록하고 파일시스템이 크러쉬되고 재부팅 될 때 파일로부터 로그정보를 읽고 실 행되지 않은 연산이 있으면 무효화 하는 것으로 하였다.  


파일시스템.hwp


'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요