Computer Science/[ OS ] 22

[ OS ] 21. 저장장치와 입출력 - 파일시스템

파일 시스템 컴퓨터에서 파일이나 자료를 쉽게 발견할 수 있도록, 유지 및 관리하는 방법 저장매체에는 수많은 파일이 있기 때문에, 이런 파일들을 관리하는 방법이다. file + directory file 이름을 가지는 디스크에 저장되는 bytes의 집합이다. 비휘발성의 보조기억장치에 저장된다. O/S는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 한다. Operation create, read, write, reposition, delete, open, close file attribute (metadata) 파일 이름, 유형, 저장위치, 파일사이즈, 접근권한, 시간, 소유자와 같은 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들 directory 파일의 메타데이터 중 ..

[ OS ] 20. 저장장치와 입출력 - I/O

I/O Two Main Jobs of Compter I/O (대부분이므로 굉장히 중요하다) ex. web browsing, file editing, youtube, games, ... computing I/O Type polling(busy-waiting) reading the status register repeatedliy until the busy bit becomes clear. interrupt CPU has a wire called the interrupt-request line if CPU detects an interrupt, ISR로 점프해서 인터럽트를 처리한다. ISR의 주소는 interrupt vector table에 정의되어 있다. DMA (Direct Memory Access) u..

[ OS ] 19. 저장장치와 입출력 - 디스크 저장장치

디스크 저장장치 비휘발성 메모리의 대용량장치인 HDD나 SDD같은 Secondary Storage에도 스케쥴링이 필요하다. 디스크 접근시간 Seek Time + retotatinal delay(track이 도는시간) + transfer time Seek Time이 가장 크다 (header를 움직이는 시간) 다중 프로그래밍 환경의 disk queue에는 많은 요청이 쌓여 있고 이 요청들을 효율적으로 스케쥴링하여 탐색시간을 줄이기 위해 디스크 스케쥴링이 필요하다 디스크 스케쥴링 알고리즘 seek time(access timie)을 최소화 하고 data transfer의 bandwidth를 최대화 하는 것이 최종 목표이다. FCFS 가장 먼저 온 것을 먼저 실행 Shortest-Seek-Time-First s..

[ OS ] 18. 메모리 관리 전략 - 캐시 메모리

캐시 메모리 주 기억장치에 저장된 내용의 일부를 임시로 저장해두는 기억장치 CPU와 주기억장치의 속도 차이에 의한 성능 저하(병목현상)를 방지하기 위한 방법 CPU가 이미 봤던 걸 다시 재 접근할 때, 메모리 참조 및 인출과정에 대한 비용을 줄이기 위해 캐시에 저장해둔 데이터를 활용한다. 캐시는 플리플롭 소자로 구성되어 SRAM으로 되어있어서 DRAM보바 빠른 장점을 지닌다. CPU와 기억장치의 상호작용 CPU에서 주소를 전달 → 캐시 기억장치에 명령이 존재하는지 확인 존재 → Hit 해당 명령어를 CPU로 전송 → 완료 비존재 →Miss 명령어를 갖고 주기억장치로 접근 해당 명령어를 가진 데이터 인출 해당 명령어 데이터를 캐시에 저장 해당 명령어를 CPU로 전송 → 완료 이처럼 캐시를 잘 활용한다면 비..

[ OS ] 17. 메모리 관리 전략 - 가상 메모리 Paging(페이지 교체 알고리즘)과 Thrasing(쓰레싱)

페이지 교체 알고리즘 페이지 부재 발생 → 새로운 페이지 할당 해야함 → 현재 할당된 페이지 중 어떤 것을 교체할 지 결정하는 방법 위 그림은 페이지 교체가 필요한 상황을 보여준다. 현재 1번 프로세스가 가리키고 있는(PC)가 B 페이지는 Page-Out되어 있는 상태고 Storage에서 B라는 페이지를 가져오려고(스와핑 시도) 하는데, 현재 physical memory에 자리가 없다(no free frame). 이 때 어떤 프로세스를 교체해야 가장 효율적으로 교체할 수 있을까? → 페이지 교체 알고리즘 필요 victim(페이지 out의 대상)을 하나 정하고, victim이 있으면 page out - page in 시킨다. 그러면 어떤 Victim을 선택해야 효율적인가? → Secondary Storag..

[ OS ] 16. 메모리 관리 전략 - 가상 메모리 Paging (Demand Paging)

가상 메모리 Paging 다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 한다. 가상메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법 이며, 프로그램이 물리 메모리보다 커도 된다는 주요 장점이 있다. 실행되는 코드의 전부를 물리 메모리에 존재시켜야 했고, 메모리 용량보다 큰 프로그램은 실행시킬 수 없었다. 또한, 여러 프로그램을 동시에 메모리에 올리기에는 용량의 한계와, 페이지 교체등의 성능 이슈가 발생하게 된다. 또한, 가끔만 사용되는 코드가 차지하는 메모리들을 확인할 수 있다는 점에서, 불필요하게 전체의 프로그램이 메모리에 올라와 있어야 하는게 아니라는 것을 알 수 있다. 프로그램의 일부분만 메모리에 올릴 수 있다면... 물리 메모리 ..

[ OS ] 15. 메모리 관리 전략 - 단순 Paging

단순 Paging 프로세스를 연속 메모리 할당(Contiguous Memory Allocation) 을 하게 되면, 외부 단편화(External Framentation)이 발생하게 되고, 값 비싼 메모리 자원의 1/3 까지 손실될 수 있는 현상을 타파하고자 나온것이 Paging(페이징)이다. 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없앤다. 외부단편화와 압축(Compaction) 작업을 해소하기 위해 생긴 방법론으로, 물리 메모리(Physical Memory)는 Frame이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)(Logical Memory)는 Page라 불리는 고정 크기의 블록으로 분리된다. 페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장..

[ OS ] 14. 메모리 관리 전략 - 연속 메모리 할당

연속 메모리 할당 Contiiguous Memory Allocation 메모리는 크게 운영체제를 위한 저장공간과, 사용자 프로세스들을 위한 공간 두 파티션으로 이루어져 있다. 운영체제는 인터럽트와 큰 상관관계가 있다. 사실 운영체제 데이터를 0번지 등의 메모리 하단에 위치시켜도 되고, 윗단에 위치시켜도 되는데, 보통은 밑단에 있다. 그 이유는 인터럽트 벡터가 주로 낮은 메모리에 위치되어 있다. 그래서 앞으로 운영체제는 메모리 주소 하단에 저장되어 있다 가정할 것이다. MMU : CPU 코어 안에 탑재 되어서 가상 주소를 실제 메모리 주소로 변환 해주는 장치 기준점의 위치가 다르더라도 offset은 같기 때문에, 더하기를 통해서 물리적 주소도 논리적 주소처럼 연속적으로 배치되게 된다. => 이게 바로 연속..

[ OS ] 13. 메모리 관리 전략 - Static Linking vs Dynamic Linking

Static Linking vs Dynamic Linking 먼저 Linking(링킹)에 대해 이해를 해보자 링킹은, 프로그램을 빌드하는 과정 (즉 컴파일 과정에서 거치는 단계) 이뤄지는 과정이다. 이 전체를 크게 컴파일 과정이라고 한다. 작은 의미의 컴파일은 Compile 과정이고, 큰 의미의 컴파일은 Compiling + Linking 전 구간을 의미한다. 프로그래머들이 이해하기 쉬운 C/C++로 코드를 짜면 Source.cpp처러 소스파일이 생성된다. 그리고 이를 Build(빌드) 하게 되면 Compiling + Linking 과정을 거친 후 .exe파일을 내보내게 된다. 작은 의미의 컴파일인 Compiling만을 거치게 되면 Object File(목적 파일)인 Source.obj가 생성되게 되고 ..

[ OS ] 12. 메모리 관리 전략 - Dynamic Loading(동적 로딩)

[ 메모리 관리 전략 ] 메모리 관리 전략에 대한 내용은 https://jhnyang.tistory.com/ 를 일부 참고하였습니다. 프로세스는 실행중인 프로그램이고, 각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다. 따라서 우리가 컴퓨터를 잘 활용하려면, 가능한 가장 효율적인 방법으로 메인 메모리를 분할하고 할당해야 한다. Dynamic Loading Loading이란, 데이터를 메모리에 옮기는 것이다. 프로그램을 실행시키면, .exe에 있는 파일이 메모리에 올라가야 실행이 되는 것과 같이 데이터를 메모리에 옮기는 것을 로딩 즉, 메모리..

[ OS ] 11. 프로세스 동기화 - 데드락(Deadlock)과 해결방법

Deadlock RAG Resource Allocation Graph (자원 할당 그래프) 자원할당 그래프란, 프로세스의 자원 할당 상태를 표현해주는 그래프이다. 동그라미는 프로세스, 네모는 자원, 점은 자원의 Instance를 의미한다. 프로세스 -> 자원 : 프로세스가 해당 자원을 요청하는 것을 의미한다. 자원 -> 프로세스 : 프로세스가 해당 자원을 소유하는 것을 의미한다. 위 RAG는 Deadlock이 아니다. P3가 작업을 마치고 자원 R3을 반납한다면, P2는 R3를 할당받아 잡업을 수행할 수 있다. RAG에 Cycle이 존재 하지 않으면 Deadlock이 아니다. RAG에 Cycle이 존재 한다면, Deadlock일 수도, 아닐수도 있다. 위의 두 RAG모두 Cycle이 존재하지만, 왼쪽 그..

[ OS ] 10. 프로세스 동기화 - 전통적인 동기화 문제

전통적인 동기화 문제 1. Producer-Consumer Problem 생산자-소비자 문제 데이터를 생산하는 쪽이 생산자, 소비하는 쪽이 소비자이다. 생산자-소비자 문제란 생산자가 데이터를 생성하여 버퍼에 저장하고, 소비자가 버퍼에서 데이터를 가져와 소비하는 과정에서 발생할 수 있는 문제이다. 대표적으로 공유 자원에 대한 임계구역 문제와, busy waiting문제가 있으며 프로세스 동기화로 이 문제를 해결한다. 2. Readers - Writers Problem 독자-저자 문제 독자(Reader)는 데이터를 읽기만하는 프로세스, 저자(Write)는 읽고 수정하는 프로세스이다. 따라서 이들의 차이점은 데이터를 수정할 수 있느냐, 없느냐이다. 독저-저자 문제란 다수의 독자와 다수의 저자가 하나의 공통 데..

[ OS ] 09. 프로세스 동기화 - 우선순위 역전(Priority Inversion)과 상속(Inheritance)

Priority Inversion & Priority Inheritance 우선순위 역전과 우선순위 상속 이제 한번 progress(No Deadlock)하고, bounded-waiting(No Prioity Inversion)의 문제까지 해결해보자. 데드락 : 두 개 이상의 프로세스가 영원히 기다려야 한다. 우선순위 역전 : 높은 우선순위의 프로세스가 낮은 우선순위 프로세스에게 밀리는 현상 ## 예시 예를 들어 집에서 우선순위가 가장 높은 아빠가 TV를 보기 위해 막내에게 나가라고 한다. 근데 막내가 리모컨을 들고 나가면, 자발적으로 리모컨을 내려 놓을 때까지 티비를 보지 못한다. priority가 높음에도 불구하고 waiting queue에서 계속해서 기다리게 된다. 이를 priority-Inheri..

[ OS ] 08. 프로세스 동기화 - 모니터(Monitor)

모니터 세마포어나 뮤텍스를 잘못 사용해서 일어나는 에러가 발생할 수 있다. 따라서 자바에서는 더욱 심플한 동기화 툴인 "모니터"를 제공한다. 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태이다. 공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다. (세마포어는 직접 키 해제와 공유자원 접근 처리가 필요하다. - 모니터의 개념 하나의 데이터(객체)마다 하나의 모니터를 결합할 수 있으며, 모니터는 그것이 결합된 데이터(객체)가 동시에 두 개 이상의 스레드에 의해 접근할 수 없도록 막는 잠금(lock)기능을 제공함으로써, 동기화를 수행하는 동기화 도구이다. 즉, 데이터(객체)에 모니터를 결합하면 하나의 스레드가 그 데이터를 사용하는 동안에는 다른 스..

[ OS ] 07. 프로세스 동기화 - 임계영역문제의 해결책 ? Mutex, Semaphore !

앞서 총 두 가지의 임계영역 문제의 솔루션을 알아보았다. SW 솔루션 : Peterson's Algorithm HW 솔루션 : "test-and-set" , "compare-and-swap" 을 이용한 Atomic Variable HW instruction이다. 이제 조금 더 SW에서 고급 레벨의 솔루션을 알아 볼 것이다. Mutex (Binary Semaphore) : 가장 간단한 동기화 툴 (locking : 열쇠) Semaphore(Counting Semaphore) : 더욱 편리하고 효과적 Monitor : 뮤텍스와 세마포어의 단점을 극복 --> Java에서 생각하는 locking은 모두 Monitor이다. Lock 하드웨어 기반 해결책으로써, 동시에 공유 자원에 접근하는 것을 막기 위해 ..