728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

 

  • 들어가며

  • 파티셔닝

구입된 새 하드 디스크 / SSD 는 파티셔닝, 포매팅 하기 전까지 사용할 수 없다.

서랍안에 물건을 보관할 때 정리해서 보관해야 한다. 이러한 일을 해야 한다.

필요한 물건을 찾기가 용이해진다.

용량이 큰 저장 장치를 하나 이상의 논리 단위로 구획하는 작업이다. 구분된 영역 하나 하나를 파티션이라고 부른다.

각각의 파티션을 확인할 수 있다.

하나의 영역이 구획되어 있다.

  • 포매팅

파일 시스템을 설정하고, 어떤 방식으로 파일을 관리할지 결정하고, 새로운 데이터를 쓸 준비를 하는 작업이다.

USB를 포매팅하는 장면이다. 용량은 어느 정도 되는지, 파일 시스템은 어떻게 되는지를 설정할 수 있다.

포맷할 때 파일 시스템이 결정된다.

파티션 마다 다른 파일 시스템을 사용할 지를 다르게 설정할 수 있다.

포매팅까지 완료가 되면 파일 시스템을 설정 했다면 파일과 디렉터리 생성이 가능해진다.

  • 파일 할당 방법

섹터를 블록 단위로 묶어서 관리하게 된다.

네모는 블록의 위치를 식별하는 주소라고 본다. 

블록의 위치에 파일을 할당할 것이다. 큰 파일은 여러 개의 블록에 걸쳐 저장이 될 것이다. 작은 파일은 적은 블록에 걸쳐 저장이 될 것이다.

  • 연속 할당

단순하게 보조기억장치에 연속해서 파일을 저장하는 방식이다.

연속 할당은 외부 단편화를 야기할 수 있다.

파일이 삭제 되었을 때, 잔여 블록에 새로운 파일을 할당하기 힘들다.

  • 불연속 할당 방법 - 연결 할당

조회할 수 있는 다음 블럭이 없는 경우 특별한 표시자를 붙여서 이 블록이 파일의 끝임을 나타낸다. 여기서는 -1이라고 표시하고 있다.

결과적으로 단점은 참조하는 블록이 많으므로 접근 속도가 매우 드리다. (자료 구조의 연결 리스트의 단점과 동일하다.)

순차적으로 접근을 해야만 한다. 성능면에서 아주 비효율적이다.

하드웨어 고장이나 오류가 발생을 하면 해당 블록에 접근을 할 수가 없다.

  • 불연속 할당 - 색인 할당

하나의 색인 블록이 모든 파일의 주소들을 기록하고 있다.

연결 할당 기법보다 파일의 임의의 위치에 접근하기가 용이하다.

  • 파일 시스템 살펴보기 - FAT 파일 시스템

USB, SSD 등 저용량 장치에서 주로 사용되는 파일 시스템이다.

연결 할당 기반의 파일 시스템이다. 연결 할당 기법의 단점을 보완하는 방식이다.

각 블록에 포함된 다음 블록 주소를 한데 모아 테이블로 관리

File Allocation Table이다.

MS-DOS에서 많이 사용 되었고

FAT12, FAT16, FAT32 등은 블록을 의미하는 비트 수를 의미합니다.

FAT가 메모리에 캐시될 경우 느린 임의 접근속도를 개선을 할 수가 있다.

기존의 문제점들을 해결할 수 있다.

위 그림은 FAT파일 시스템의 파티션을 간략화한 도식도이다.

예약 영역(파일 시스템에 필요한 기능들이 미리 예약되어 저장되는 영역)  / FAT 영역 / 루트 디렉터리 영역 (루트 디렉터리가 저장되는 영역) / 데이터 영역 (각종 파일들이 관리되기 위한 영역)

가장 먼저 루트 디렉터리부터 접근을 해야 될 것이다. 홈 디렉터리는 3번 블럭에 있다. 3번 블럭을 읽어서 home 디렉터리를 보니까 15번 블럭에 저장되어 있는 것을 알 수 있다. 그래서 minchul 디렉터리에서 a.sh의 9번 블럭을 읽을 수 있다. FAT 9번 블럭으로 가서 연결된 블럭들을 읽어서 파일에 접근하게 된다. -> /home/minchul/a.sh을 읽는 과정

  • 파일 시스템 살펴보기 - 유닉스 파일 시스템 (색인 할당 기반 파일 시스템)

i-node는 파일의 속성 정보와 15개의 블록 주소 저장 가능 

파일마다 이러한 i-node를 갖고 있고, i-node마다 고유한 번호를 갖고 있다.

i-node가 유닉스 시스템에서 가장 중추적인 역할을 한다.

i-node들이 하나의 파티션에 저장되어 있다.

만약에 15개 파일보다 큰 파일의 주소를 저장해야 한다면 어떻게 해야 할까?

12개에는 파일의 직접 블록 주소 저장을 입력하게 된다.

만일 13번째 부터 주소가 부족하다면, 12번째 블록 주소에 단일 간접 블록 주소를 저장한다.

만일 이로도 충분하지 않다면

14번째 블록에 이중 간접 블록 주소를 저장한다.

만일 이로도 충분하지 않다면 15번째 주소에 삼중 간접 블록 주소를 저장한다.

여기까지만 와도 왠만한 크기의 파일들은 모두 저장할 수 있게 된다.

유닉스 파일은 i-node만 알아도 파일의 속성과 파일의 위치를 전부 다 알 수 있다. 파일의 크기가 커도 마찬가지다.

i-node가 가장 중추적인 역할을 하고 있다. 파일 이름 외에 모든 것을 갖고 있다. 

파일 이름과 i-node 번호만 알아도 어떤 크기의 파일도 알아볼 수 있다.

다음은 예제이다.

i-node에는 블록주소만 갖고 있다.

루트 디렉터리에 가장 먼저 접근을 해야 한다. 루트 디렉터리 접근을 위한 i-node를 항상 기억하고 있다. 2번 노드에 접근해서 1번 블록에 접근해야 한다는 것을 알 수 있다. 그럼 루트 디렉터리에서 3번 노드를 확인해야 함을 알 수 있다. 가서 210번 블록을 확인하면 home 디렉터리를 알 수 있고, 8번 노드에 minchul 디렉터리가 있음을 알 수 있다. 8번 노드로 접근을 해서 121번 블럭에 minchul 디렉터리가 저장되어 있음을 알 수 있다. 다시 minchul 디렉터리로 가서 a.sh이 9번 노드에 저장되어 있음을 알 수 있다. 그럼 9번 노드로 가서 해당 색인을 읽어 a.sh을 읽는다.

파일 시스템만을 다루는 전공서가 있으므로, 파일 시스템이 무엇인지 어떻게 블록을 통해서 파일과 디렉터리를 관리하는지 그리고 대표적으로 어떤 기법으로 접근하는지를 보았다.

NT-FX, EXT 파일 시스템 등도 알아보면 좋다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=C-IYRzC-GW8&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=45

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

 

  • 쓰기 시 복사

프로세스가 자원을 공유하는 대표적인 방법.

fork()를 호출하면 부모 프로세스와 동일한 자식 프로세스가 생성된다.

프로세스는 기본적으로 자원을 공유하지 않는다. 

자식 프로세스를 생성하는데 시간이 오래 걸릴 수 있고, 복제되는 부모 프로세스로 인해 메모리가 많이 소요될 수 있다.

부모 프로세스와 자식 프로세스는 동일한 프레임을 갖고 있지만, 쓰기 작업 시 

예를 들어 자식 프로세스가 쓰기 작업을 수행해야 한다면 페이지 2번의 복사본을 만들고 쓰기 작업을 수행한다.

동일한 프레임을 가리키므로 메모리 효율을 높일 수 있다. 또한 프로세스 생성 시간을 절약할 수 있다.

 

  • 계층적 페이징

기존 페이지 테이블보다 페이지 번호가 더 분리된다. 이렇게 논리주소가 이루어 진다. 물리 주소를 찾아간다.

바깥 페이지 번호를 조회하는 p1

페이지 테이블의 분리된 페이지를 조회하는 p2

그리고 물리 주소를 가리키는 d 로 구성된다.

계층이 많다고 해서 반드시 성능이 좋다고 볼 수는 없다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=i4rpeyqAODo&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=43

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

  • 들어가며

  • 페이지 교체 알고리즘

어떤 페이지를 교체해야 할지 결정하는 방법(알고리즘)이 페이지 교체 알고리즘

페이지 폴트가 발생하면 보조기억장치에 다시 접근을 해야하기 때문에 이를 줄여야 한다.

이를 생략해서

이렇게 반복되는 페이지를 생략하고 CPU의 페이지 참조를 생략한다. 이를 페이지 참조열로 간주한다.

프레임에 가장 오래 머물렀던 페이지를 내쫓고 필요한 페이지를 불러오게 됩니다.

  • FIFO의 문제점

프로그램 실행 내내 사용될 페이지는 먼저 적재되었다고 해서 내쫓겨서는 안 된다.

  • 최적 페이지 교체 알고리즘

  • 스래싱과 프레임 할당

프레임이 정해져 있기 때문에 메모리가 큰 컴퓨터가 성능이 더 좋다.

CPU가 쉴새없이 프로세스를 실행해야지, 페이지 교체에 너무 많은 시간을 소모하면 성능이 전체적으로 저하된다. 이를 스래싱이라고 한다.

스래싱은 굉장히 큰 컴퓨터 성능의 저하를 불러올 수 있다.

멀티프로그래밍의 정도는 메모리에 동시에 실행되는 프로세스의 수

동시에 실행되고 있는 프로세스의 수가 많다고 해서 CPU의 이용률이 높아지는 것은 아니다. 성능이 좋아지는 것은 아니다. 어느 정도까지는 CPU가 쉴새없이 일을 수행하지만 그 기준을 넘기면 CPU의 이용률이 현저히 떨어진다. 이 지점이 스래싱이 발생한 지점이다.

최소한의 프레임수를 파악하고 이를 프로세스들에게 할당을 해주어야 합니다.

  • 프레임 할당 방법(1) - 균등 할당

  • 프레임 할당 방법(2) - 비례 할당

균등 할당과 비례 할당은 정적 할당 방식 (크기만을 고려한 할당 방식)

  • 프레임 할당 방법(3) - 작업 집합 모델

CPU가 어떤 메모리를 참조할 때는 비슷한 구역을 참조한다. 100개의 페이지가 있다면 집중적으로 참조를 하지 전부 참조하지는 않는다. CPU가 특정 시간동안 주로 참조한 패이지 개수 만큼만 참조한다.

3초 동안 7개의 페이지를 집중적으로 참조한다면, 순간적으로 7개의 페이지에게 프레임을 할당해 주는 것이다.

t = t1일 때 작업 집합 = {5, 6, 7} 

따라서 할당될 프레임은 3개이다.

반비례 관계를 보이는 것을 볼 수 있다.

상한선과 하한선으로 척도를 측정할 수 있다.

 

작업 집합 모델, 페이지 폴트 빈도는 실행하는 과정을 보고 프레임을 할당한다. 그래서 동적 할당 방식이라고 부른다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=nF26uioM6zU&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=42

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습을 남깁니다.

  • 들어가며

실제 메모리보다 큰 메모리를 필요로 하는 프로세스를 실행할 수가 없다.

이러한 문제들을 가상 메모리 관리, 특히 페이징을 통해서 말씀드려보도록 하겠습니다.

실행하고자 하는 프로그램을 일부만 메모리에 적재해서 실제 물리 메모리보다 큰 물리 메모리를 실행할 수 있도록 하는 기술

훨씬 큰 메모리를 요구하는 프로세스를 실행하는 기술이 바로 가상 메모리입니다.

대부분의 운영체제가 사용하는 페이징 기법을 알아보도록 하겠습니다.

  • 페이징이란

불연속적으로 메모리를 읽을 수 있는 방법은 무엇이 있을까?

  • 페이지 테이블

페이지 테이블을 통해서 마치 연속적으로 물리 메모리에 저장된 것 처럼 보이게 할 수 있도록 만들 수 있다.

페이지 번호를 통해서 프레임 번호를 순차적으로 실행할 수 있을 것이다.

CPU는 그저 논리 테이블의 번호를 순서대로 실행하면 된다.

  • 내부 단편화

리눅스의 경우 예외적인 페이지로서 일부 페이지들을 기존의 설정된 페이지의 크기보다 더 크게 허용이 될 수 있다.

큰 크기의 페이지를 대형 페이지라고 부른다.

  • PTBR

페이지 테이블이 메모리에 저장되어 있으면, 메모리 접근 시간이 두배가 되는 부작용이 있다.

  • TLB

캐시 메모리를 통해 메모리를 두 번 접근하는 것을 줄일 수 있다.

두번 째 단락은 오타이다. TBL에 없다면 TBL 미스가 발생한다.

  • 페이징에서의 주소 변환

변위: 테이블에서 얼마나 떨어져 있는지

  • 페이지 테이블 엔트리

수정 비트는 스와핑이랑 관련이 있습니다.

CPU가 만일 이 페이지를 읽기만 했다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=8ufliWkgqMo&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=41

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 내용을 남깁니다.

  • 들어가며

문제점과 해결 방법을 알아보겠습니다.

  • 스와핑

  • 메모리 할당

CPU가 메모리를 계속 압축해야 하는 비효율적인 상황이 발생함

이를 해결학 위해 가상 메모리 기법 그리고 페이징 기법이 있습니다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=bNFLpMUYqSE&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=40

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 복습한 자료를 남깁니다.

  • 들어가며

 

모든 철학자들이 동시에 식사를 하려면 계속 생각만 하는 지경에 이르게 된다.

어떤 스레드나 프로세스도 실행될 수 없다.

서로가 갖고 있는 자원이 해제될 때 까지 서로 무작정 기다릴 수 밖에 없다.

이러한 상황을 교착 상태라고 한다.

 

감사합니다.

참고 자료 url - https://www.youtube.com/watch?v=Kcv0_Yb8Rqw&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=38

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

  • 들어가며

이 기법들이 어떻게 상호 배제를 이루는지 그리고 어떻게 실행 동기화를 이루는지를 중점적으로 살펴보면 좋을 것 같다.

  • 뮤텍스 락

옷 가게에 가면 탈의실에는 한 번에 한명씩 들어간다.

탈의실이라는 자원을 이용하고 손님들은 프로세스에 비유하고 탈의실을 임계 구역에 비유한다.

탈의실 안에 있는 사람이 있는지 없는지 알 수 없는 경우라면, 문이 잠겨 있다면 사람이 있다고 판단할 수 있는 근거가 된다.

전역 변수로 자물쇠 역할을 하는 락 변수가 있어야 한다.

이에 따라 acquire함수와 release함수가 있을 수 있다.

=> 상호배제를 위한 동기화를 이룰 수 있다.

lock이 false가 될 때까지 쭉 쉴새없이 확인을 해보는 것과 같다.

썩 좋은 방식은 아닙니다.

무한히 반복적으로 대기하면서 임계 구역이 열려 있는지 안 열려 있는지 확인하는지 이를 바쁜 대기라고 부릅니다.

  • 세마포

바이너리 세마포와 카운팅 세마포가 있다.

바이너리 세마포는 이진법으로 뮤텍스 락과 거의 유사하기 때문에 일반적으로 카운팅 세마포를 지칭한다.

프로세스와 스레드들이 STOP인 경우 기다리고, GO이면 임계 구역에 진입한다.

전역 변수 S = 프로세스의 개수 (사용 가능한 공유 자원의 개수)

wait 함수 = 임계구역에 들어가도 되는지 알려주는 함수

signal 함수 = 임계구역 앞에서 기다리는 함수에 '이제 가도 좋다'고 신호를 주는 함수

전역 변수 S가 0이하라면 내가 들어갈 수 있는지를 무한히 반복하고 

false가 되면 사용할 수 있는 프로세스의 개수를 1 낮추고(내가 들어갈 거니까) 임계 구역에 진입한다.

signal() 함수는 전역 변수 s를 1 증가시킨다.

  • 모니터

debuging이 어렵다. 그래서 등장한 것이 모니터다. 개발자가 다루기 편리한 동기화 도구다.

모니터는 실행 순서 동기화도 이룰 수가 있다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=4u13f9Umq7Y&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=37

 

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 컴퓨터 구조 + 운영체제를 공부하고 학습한 자료를 남깁니다.

  • 01.들어가며

(이 프로세스들이 동시에 실행해도 괜찮을까?)

(스레드 또한 동기화의 대상이기도 하다.)

(프로세스들의 동기화를 고려해야 한다.)

  • 02.동기화의 의미

공동의 목적을 위해서 동시 다발적으로 협력해서 수행되는 프로세스들은 아무렇게나 실행되서는 안 된다.

올바른 수행을 위해 프로세스들을 동기화해주어야 한다.

실행 순서 제어, 상호 배제 이렇게 두 가지 동기화가 있다.

실행의 문맥을 갖는 프로세스 및 스레드는 동기화의 대상이다.

  • 03.실행 순서 제어를 위한 동기화

반드시 writer 프로세스가 실행되어야 reader 프로세스가 같은 작업 파일인 book.txt 파일을 읽을 수 있다.

  • 04.상호 배제를 위한 동기화

프로세스가 교차해서 처리되면 오류가 발생할 수 있다.

잔액이라고 하는 데이터를 동시에 사용을 했기 때문에 오류가 발생한 것이다.

문맥 교환이 일어나더라도 기다려야 한다.

  • 생산자 소비자 예제

모든 프로그램은 동기화를 제공한다.

버퍼 즉 저장 공간에서 데이터를 서로 삽입하거나 뺀다.

총합을 10으로 초기화 해보자.

동시에 접근해서는 안 되는 자원: 총합에 접근했기 때문이다.

이미 진입한 프로세스 외에는 대기를 해야 합니다.

고급언어를 저급언어로 변환하면 한 줄의 코드가 아닙니다. 여러 줄의 코드가 발생합니다.

컴퓨터 내부에서는 한 줄이 아니다.

이 도중에 문맥 교환이 발생을 하면 문제가 발생한다.

반드시 동기화 되어야 한다.

 

감사합니다.

참고 url - https://www.youtube.com/watch?v=0YDjblJn30k&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=36

 

 

728x90
반응형
LIST

+ Recent posts