본문 바로가기

공부/OS23

[운영체제] 후기 강의는 좋았다. 비대면이라 영상을 여러 번 볼 수 있었던 것도 좋았다. 시험 외 채점 요소는 숙제, 프로젝트, 발표가 있었다. 숙제는 3개가 나왔는데 부담이 적은 수준이다. 발표는 프로젝트와 관련된 내용으로, 같은 수업을 듣는 사람들이 프로젝트할 때 참고할 수 있도록 발표하면 된다. 즉, 프로젝트 내용을 먼저 살펴보고 이 프로젝트를 구현하는데 필요한 내용만 발표하면 된다. 프로젝트가 무엇이 나왔는지는 안 보고 발표 내용에만 집중해서 엉뚱한 내용을 발표하는 경우도 더러 있었다. 프로젝트는 내가 스스로 할 수 있는 범위를 벗어났다. 실행 환경이 교수님과 같다는 보장과 적절한 IDE 를 사용했다면 좀 더 나았을 지도... 나는 데스크톱과 노트북이 있는데 데스크톱에서 virtual box 실행이 안 돼서 노트북.. 2021. 6. 24.
[운영체제] SSD (Solid State Drive) SSD 는 SamSung Drive 의 약자이다. 구라다. Solid State Drive 인데, HDD 가 Disk 여서 끝에 D 를 Disk 로 오해하는 경우가 있다. 하지만 SSD 에는 disk 가 없다. HDD 의 기계적인 부품들 때문에 고장이 잦고, 느리고, 전력 소모가 심하다. 모바일 환경에선 배터리 소모율에도 영향이 있기 때문에 부적합하다. 하드디스크의 물리적인 부분을 제거하면 전력 문제와 속도 문제를 해결할 수 있지 않을까? 이것이 SSD 이다. NOR flash memory : ram 처럼 random access 가 가능하다. 주로 bios 에 사용된다. NAND flash memory : disk 처럼 block 단위로 접근할 수 있다. HDD 대신 사용된다. SSD 에는 Disk 가.. 2021. 6. 7.
[운영체제] 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.