본문 바로가기

공부46

[운영체제] RAID 하드디스크는 비용대비 사용할 수 있는 용량이 크다. 하지만 물리적인 부분을 많이 사용하는 HDD 특성상 고장의 빈도수가 높고 느리다는 단점을 갖고 있다. RAID 는 HDD 여러 개를 같이 사용하여 이런 문제를 해결한다. 또한 RAID 를 사용하는 프로그래머는 여러 개의 HDD 를 이용하고 있다는 것을 몰라야 한다. RAID : Redundant Array of Inexpensive Disks 의 약자이다. 근데 요즘엔 비싸서 inexpensive 대신 independent 로 사용하기도 한다. 서버에서는 표준적으로 사용한다. RAID Controller : cpu, sw, memory 를 갖고 있는 HW 이다. RAID 자체가 운영체제를 갖고 있는 하나의 시스템이다. RAID level 에 따라 con.. 2021. 6. 7.
[운영체제] 하드디스크 (Hard Disk) platter : HDD 에는 여러 장(보통 4장)의 디스크가 있는데 한 장의 디스크를 platter 라고 부른다. 데이터를 저장한다. head : platter 에 있는 데이터를 읽는다. arm : head 를 연결하는 팔 역할이다. 마찬가지로 여러 개가 있다. platter 마다 두 개씩 있는데, 병렬로 읽고 쓸 수 있다. surface : 하나의 platter 는 양면 다 활용이 가능하다. 한 면을 surface 라 부른다. sector : HDD 의 기본 단위이다. 보통 페이지와 같은 크기인 4kb 를 많이 쓴다. track : surface 내에서 반지름이 다른 동심원, 바깥에 있는 track 일수록 더 많은 데이터를 저장할 수 있다. 그리고 더 빠르게 읽고 쓸 수 있다. platter 가 도는.. 2021. 6. 7.
[운영체제] Free space malloc 과 free 는 명시적 메모리 할당과 해제이고, 할당할 수 있는 크기에 제한이 없기 때문에 다음 두 가지 문제를 해결해야 한다. 1. 페이지 단위로 할당하지 않을 경우 메모리 관리가 힘들다. -> 외부 단편화 문제 2. free 의 인자로 포인터밖에 들어가지 않는데, 몇 바이트인지 알 수 있는 방법이 필요하다. malloc 과 free 를 구현하기 위해서는 사용중인 메모리의 상태와 크기를 유지해야 한다. 성능도 O(n) 가 걸리는 방법이 아닌 O(1) 에 처리할 수 있는 방법이 존재한다. heap fragmentation : 일반적으로 외부 단편화를 말한다. free list : 힙 영역에서 사용가능한 영역에 대한 list 를 나타내는 자료구조 연결 리스트를 만들어서 빈 공간에 대한 정보를 .. 2021. 6. 7.
[운영체제] 데드락 (Deadlock) atomicity violation : 연속적으로 수행되어야 하는 연산이 연속적으로 수행되지 못 한 경우 → mutex 로 해결 order violation : 어떤 순서를 가정했는데 그 순서로 실행되지 않는 경우 void init() { mThread = PR_CreateThread(mMain, ...); } mMain() { ... } mMain 보다 mThread 초기화가 먼저 이루어질 거라 가정한 코드이다. 데드락 thread 1 은 lock A 을 잡았고 lock B 를 대기중인 상태, thread 2 는 lock B 를 잡았고 lock A 를 대기중인 상태에서 데드락이 발생한다. 데드락이 발생하려면 다음과 같은 조건을 만족해야 한다. mutual exclusion : 공유 자원에 대한 액세스 .. 2021. 6. 2.
[운영체제] 세마포어 (Semaphore) 제목은 세마포어로 바뀌었지만 병행성과 관련 있는 내용이다. semaphores : mutex 의 일반화된 형태 semaphores 는 edsger dijkstra 라는 사람이 발명했고 mutex 나 condition variable 을 구현할 수 있다. 오 다익스트라 아저씨 여기도 나오네? 기존의 lock 이 하나라면 semaphore 는 락 할 수 있는 횟수를 정수로 나타낸다. 다음과 같은 연산이 있다. p (sem_wait() ) : - 연산, wait 와 유사하다. (n sleep) - lock - n 이 음수라면 기다려야 한다. 음수 절대값은 대기 중인 스레드의 개수가 된다. v (sem_post() ) : + 연산, signal 연산과 유사하다. (n > 0 -> wake one u.. 2021. 6. 1.
[운영체제] 병행성 3 (Concurrency) : Condition Variable lock 만으로는 어떤 조건을 만족해야 수행할 수 있는 스레드를 구현할 수 없다. 락과 함께 어떤 조건을 만족하는 지 확인하는 데, 그 조건, 스레드의 수행을 제어하는데 사용하는 것이 condition variable 이다. condition variable 은 락과 함께 사용된다. condition variable : 스레드들이 공유자원을 향해서 경재하고 있을 때 스레드 수행을 제어하기 위해 사용하는 일종의 시그널이다. bouned buffer 만약에 어떤 buffer 가 있고 이 버퍼의 크기가 특정 이상이 되면 그 때 읽는 로직을 작성하고자 한다면 어떻게 구현해야 하겠는가? 버퍼의 크기가 특정 크기가 될 때까지 스레드는 기다린다. 조건을 만족하게 되면 시그널로 알려 준다. 처음에 버퍼를 읽어들일 때 .. 2021. 5. 31.
[운영체제] 병행성 2 (Concurrency) 모든 코드를 병렬로 동작시킬 수는 없다. 싱글턴, 연결 리스트, 경쟁 자원 등을 사용하는 코드라면 예상치 못 한 결과가 발생할 수 있다. 이 경우엔 atomic 을 보장해야 한다. 그 중에서 mutex(mutual exclution) 를 위한 lock 을 구현하는 방법에 대해 살펴본다. lock 과 unlock 사이에는 atomic 을 보장해야 한다. critical section 에 들어간 스레드를 이 lock 의 owner 라고 부른다. lock 의 owner 가 존재할 때 다른 스레드는 들어갈 수 없다. 가장 간단한 접근 방법으로 lock 이라는 자료구조에 flag 라는 필드가 있다고 가정해 보자. flag 가 0이면 lock 의 소유자가 없는 것이고, flag 가 1이면 누군가가 lock 을 갖고.. 2021. 5. 31.
[운영체제] 가상 메모리 : two-level paging 가상 메모리 정리하는데, 가장 중요한 부분을 빼먹었다. 진짜로 가장 중요한 건 아니고 내가 발표해야할 부분이어서 가장 중요하다. 발표 내용 : IA-32 two-level paging paging 기법을 이용하면 두 가지 문제점이 발생한다. 1. 속도 2. 메모리 낭비 속도 문제는 TLB 를 사용해 해결했었다. 32 비트 주소와 4kb 의 페이지 크기를 사용하면 페이지 테이블 하나의 크기는 4mb 가 된다. (2^20 * sizeof(PTE, 4byte) = 4mb) 사용하지 않는 페이지의 수가 많을 경우 그만큼 메모리 낭비가 된다. 간단한 해결 방법으로 page size 를 늘릴 경우 내부 단편화 문제가 생기고, inverted page table(VPN -> PFN 매핑이 아니라 PFN -> VPN .. 2021. 5. 16.
[운영체제] 병행성 (concurrency) 병행성 무어의 법칙 : 반도체 집적회로의 성능이 18개월마다 2배로 증가한다는 법칙이다. 근데 본인은 18개월이라고 말한 적 없고 24개월이라고 말했다고 한다. 2010 년 즈음부터 CPU 의 계산 속도는 둔화되기 시작했다. 이유는 열역학의 물리적인 한계 때문이다. 5nm 공정까지 가면 원자의 전자가 다른 곳으로 워프하는 문제가 발생한다. 하지만 삼성에서 5nm 공정에 성공했다. 삼성은 외계인을 가두고 있는 것이 이로써 확실해졌다. 하지만 생산 비용은 매우 높아졌다. CPU 속도의 한계 때문에 멀티 프로세서가 도입되었다. 여러 코어를 돌려 성능을 높인다. 그래서 병렬성을 증가시키는 게 중요하다. 병행성(concurrentcy) : 동시에 동작하는 것처럼 동작. 코어가 하나여도 된다. 병렬성(paralle.. 2021. 5. 16.