728x90

OS 94

운영체제 26. 이벤트 기반의 병행성(event-based concurrency)

26. 이벤트 기반의 병행성(event-based concurrency) 이벤트 기반 프로그래밍은 쓰레드 기반의 병령 프로그래밍에 내제한 두 가지 문제점을 해결할 수 있다. 무엇보다 멀티 쓰레드 기반 프로그래밍은 어렵다. 자료구조를 락으로 보호하는 것을 잊을 수 있고, 교착 상태나 혹은 다른 문제들이 발생할 수 있다. 또 다른 문제는 멀티 쓰레드 프로그램에서는 개발자가 쓰레드 스케줄링에 대한 제어권을 갖고 있지 않다는 것이다. 운영체제가 CPU스케줄링에 대한 전권을 갖는다. 개발자는 운영체제가 합리적으로 쓰레드들의 실행 순서를 결정하기만을 기대할 수 밖에 없다. 26.1 개본 개념: 이벤트 루프 특정 사건의 발생을 대기한다. 사건이 발생하면, 사건의 종류를 파악한 후 I/O를 요청하거나 추후 처리를 위하..

책/운영체제 2024.03.24

24.03.23 운영체제

운영체제 25. 병행성 관련 버그 25.1 비교착 상태 오류 원자성 위반 오류 다수의 메모리 참조 연산들 간에 있어 예상했던 직렬성(serializability)이 보장되지 않았다.(즉, 코드의 일부에 원자성이 요구되었으나, 실행시에 그 원자성이 위반되었다.) 문제의 해결책은 공유 변수 참조 앞 뒤에 락을 추가해준다. 이 자료구조를 사용하는 모든 코드들이 이 락을 먼저 획득해야 한다. 순서 위반 오류 두 개의(그룹의) 메모리 참조 간의 순서가 바뀌었다.(즉, A가 항상 B보다 먼저 실행되어야 하지만 실행 중에 그 순서가 지켜지지 않았다.) 오류를 수정하는 방법은 순서를 강제하는 것이다. 이러한 종류의 동기화에는 컨디션 변수가 잘 맞는다. 쓰레드간의 순서가 문제가 된다면 컨디션 변수(또는 세마포어)를 사용..

운영체제 25. 병행성 관련 버그

25. 병행성 관련 버그 25.1 비교착 상태 오류 원자성 위반 오류 다수의 메모리 참조 연산들 간에 있어 예상했던 직렬성(serializability)이 보장되지 않았다.(즉, 코드의 일부에 원자성이 요구되었으나, 실행시에 그 원자성이 위반되었다.) 문제의 해결책은 공유 변수 참조 앞 뒤에 락을 추가해준다. 이 자료구조를 사용하는 모든 코드들이 이 락을 먼저 획득해야 한다. 순서 위반 오류 두 개의(그룹의) 메모리 참조 간의 순서가 바뀌었다.(즉, A가 항상 B보다 먼저 실행되어야 하지만 실행 중에 그 순서가 지켜지지 않았다.) 오류를 수정하는 방법은 순서를 강제하는 것이다. 이러한 종류의 동기화에는 컨디션 변수가 잘 맞는다. 쓰레드간의 순서가 문제가 된다면 컨디션 변수(또는 세마포어)를 사용하여 해결..

책/운영체제 2024.03.24

운영체제 24. 세마포어

24. 세마포어 24.1 세마포어 : 정의 세마포어는 정수 값을 갖는 객체로서 두 개의 루틴으로 조작할 수 있다. POSIX 표준에서 이 두 개의 루틴은 sem_wait()와 sem_post()이다. 세마는 초기 값에 의해 동작이 결정되기 때문에, 사용하기 전 제일 먼저 값을 초기화 해야한다. 같은 프로세스 내의 쓰레드 간에 세마포어를 공유한다. 두 루틴들은 동시에 다수 쓰레드들에 의해 호출될 수 있다. 임계영역이 적절히 보호되어야 한다. 임계영역 보호를 위해 사용할 함수내에서 임계영역 보호문제가 존재한다. sem_wait() 함수는 세마포어 값이 1 이상이면 즉시 리턴하거나, 해당 세마포어 값이 1 이상이 될 때까지 호출자를 대기시킨다. 다수의 쓰레드들이 sem_wait()을 호출 할 수 있기 때문에,..

책/운영체제 2024.03.23

DMA(Direct Memory Access)

DMA(Direct Memory Access) CPU를 거치지 않고 주변장치가 시스템 메모리에 직접 접근할 수 있도록 해주는 기술이다. CPU가 데이터 전송을 관리하는 대신, DMA 컨트롤러가 이 역할을 담당하여 CPU를 다른 작업에 할당할 수 있다. 작동 방식 DMA 컨트롤러 : DMA 연산은 DMA 컨트롤러라는 특수한 하드웨어에 의해 수행된다. 이 컨트롤러는 주변장치와 메모리 간의 데이터 전송을 관리한다. 메모리 접근 : 주변장치가 데이터를 전송할 준비가 되면, DMA 컨트롤러는 메모리 주소를 지정하고 데이터 전송을 시작한다. 이 과정에서 CPU는 관여하지 않는다. 인터럽트와 완료 신호 : 데이터 전송이 완료되면, DMA 컨트롤러는 CPU에 인터럽트를 보내 전송이 완료되었음을 알린다. 이를 통해 CP..

Computer/CS 2024.03.22

Swap Disk

Swap Disk RAM이 모두 찼을 때 RAM에서 잘 사용하지 않는 page들을 옮겨 두는 disk 공간이다. Swap disk는 물리적 메모리가 부족할 때 사용되는 디스크 기반의 저장 공간이다. 이 공간은 일부 페이지를 임시로 저장하는 데 사용되며, 이를 스와핑 이라고 한다. 스왑 디스크의 목적은 시스템의 물리적 메모리가 부족할 때 추가적인 가상 메모리 공간을 제공하는 것이다. 시스템은 더 많은 프로세스와 데이터를 동시에 처리할 수 있다. 작동방식 스와핑 : 메모리가 가득 차면, 운영체제는 가장 적게 사용되는 메모리 페이지들을 스왑 디스크로 이동시킨다. 이를 통해 메모리에서는 더 중요한 데이터를 처리할 수 있게 된다. 페이지 교체 : 스왑 디스크에 저장된 페이지가 다시 필요하게 되면, 운영체제는 해당..

Computer/CS 2024.03.22

Page의 종류

Page의 종류 Anonymous page(익명 페이지) 파일으로부터 매핑되지 않은, 커널로부터 할당된 페이지 File-backed page(파일 기반 페이지) 파일으로부터 매핑된 페이지 Anonymous Page 커널로부터 프로세스에게 할당된 일반적인 메모리 페이지이다. 즉, 익명 페이지는 힙을 거치지 않고 할당받은 메모리 공간이다.(힙도 익명 페이지이다. malloc, new같은 메모리 할당자는 익명 페이지에서 일부 메모리를 잘라 할당 받는것이다.) 익명이라는 뜻은 파일에 기반하고 있지 않은 페이지라는 뜻이다. 페이지가 파일에 매핑되어 있다면, 그 메모리는 파일 내용을 담고 있을 것이다. 하지만 익명 페이지는 파일에 매핑되어 있지 않았기 때문에 0으로 초기화된 값을 담고 있다. 프로세스가 mmap()..

Computer/CS 2024.03.22

페이지 교체 정책(Page Replacement Policy)

Page Replacement Policy evict할 페이지를 고르는 여러가지 알고리즘 OPT(Belady’s Algorithm) 앞으로 가장 오랫동안 사용되지 않을 페이지를 빼는 알고리즘 page fault가 나면, 가장 나중에 참조될 페이지를 빼는 방식이다. 대신 이 방식은 어느 페이지가 참조될 지 알아야 한다는 단점이 있다. 대부분의 현실 컴퓨팅의 경우 미래에 어느 페이지가 참조될 지 아는 것은 불가능하다. 따라서 belady’s algorithm은 다른 알고리즘의 효율성을 따지는 평가기준으로 많이 쓰인다. FIFO 가장 먼저 들어온 페이지를 가장 먼저 빼는 알고리즘 가장 직관적이고 일반적인 방법이다. 하지만 이 알고리즘에는 치명적인 문제점이 있는데, 이를 belady’s anomaly라고 부른다..

Computer/CS 2024.03.22

Lazy Loading

Lazy Loading 프로그램이 실제로 해당 데이터를 필요로 할 때까지 데이터의 로딩을 지연시키는 기법이다. 이는 주로 메모리 관리에 사용되며, 프로그램이 시작할 때 필요한 모든 데이터를 메모리에 즉시 로드하지 않고, 필요한 순간에만 해당 부분을 로드한다. 메모리 사용의 효율성을 높이고 시스템의 전반적인 성능을 개선한다. 메모리는 한정된 자원이므로, 모든 데이터를 미리 로드하면 불필요한 메모리 사용으로 이어질 수 있다. Lazy Loading의 작동 방식 Demand Paging : 프로세스가 페이지에 접근하려 할 때마다 해당 페이지가 메모리에 없으면 페이지 폴트가 발생한다. 이후 운영체제는 필요한 페이지를 디스크에서 메모리로 로드한다. 리소스 사용 최적화 : 프로세스가 실제로 사용하지 않는 페이지는 ..

Computer/CS 2024.03.22

페이지 폴트(Page Fault)

Page Fault CPU가 접근하려는 페이지가 메모리에 없는 경우이다. 즉, 페이지 테이블의 valid bit 값이 0인 경우이다. 페이지 폴트가 발생하면 운영체제는 그 데이터를 메모리로 가져와서 마치 페이지 폴트가 전혀 발생하지 않은것처럼 프로그램이 계속적으로 작동하게 해준다. 동작 page table을 통해 필요한 page가 없다면 (invalid) 즉, page fault 운영체제에 page fault trap을 발생시킨다. 동작하고 있던 프로세스의 PCB를 메모리에 저장한다. 운영체제는 다른 page table을 확인한다. 그리고 뭔가 이상하다면 프로세스를 중지시키고 그냥 메모리에 없는 것이라면 backing store에서 찾는다. 필요한 페이지를 찾아서 물리 메모리에서 빈 frame을 찾는다...

Computer/CS 2024.03.22
728x90