Computer Science 47

[ 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 하드웨어 기반 해결책으로써, 동시에 공유 자원에 접근하는 것을 막기 위해 ..

[ OS ] 06. 프로세스 동기화 - 임계영역(Critical Section)

[ 프로세스 동기화 ] Critical Section 임계영역 멀티 스레딩에 문제점에서 나오듯, 동일한 자원을 동시에 접근하는 작업(e.g. 공유하는 변수 사용, 동일 파일을 사용하는 등)을 실행하는 코드 영역을 Critical Section 이라 칭한다. 다른 프로세스와 공동으로 사용하는 변수, 테이블, 파일 등을 변경하는 부분이다. Critical Section Problem 임계영역 문제 프로세스들이 Critical Section 을 함께 사용할 수 있는 프로토콜을 설계하는 것이다. Race Conditoin 여러 프로세스가 공통된 데이터를 조작할 때 결과가 조작의 타이밍이나 접근 순서에 의해 결정되는 현상 Requirements 해결을 위한 기본 조건 Mutual Exclusion(상호 배제) 프..

[ OS ] 05. 동기와 비동기(Sync, Async)

[ 동기와 비동기 ] 동기 Synchronous 동기는 말 그대로 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다는 약속이다. 바로 요청을하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 한다. 요청과 결과가 한 자리에서 동시에 일어남 A노드와 B노드 사이의 작업 처리 단위(transaction)을 동시에 맞추겠다. 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 하는 단점이 있다. 비동기 Asynchoronous 비동기는 동시에 일어나지 않는다를 의미한다. 요청과 그 결과가 동시에 일어나지 않을거라는 약속이다. 요청한 그 자리에서 결과가 주어지지 않음 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다. 동기보다 복잡하지만 결과가 주어지는데 ..

[ OS ] 04. CPU Scheduler

[ CPU 스케쥴러 ] 여러 프로세스를 concurrent하게 쓰는게 멀티프로그래밍과 멀티쓰레딩이었고, 그 전제조건으로 바로 CPU Scheduling이 필요하다. 스케줄링 대상은 Ready Queue 에 있는 프로세스들이다. (이 Ready Queue는 LinkedList or Binary Tree or FIFO Queue or PriorityQueue를 사용하여 만들어진다.) 들어가기 전에 먼저 용어 정리 부터 하겠다. 선점(preemptive) : 우선순위가 높은 작업이 오거나, 해당 작업이 더 우선되어야 한다고 판단되면 해당 작업에게서 CPU를 빼앗을 수 있다. 비선점(non-preemptive) : 일단 CPU를 할당받으면 해당 프로세스가 끝날때까지 CPU를 빼앗기지 않는다. 스케쥴링 알고리즘에..