CS/Operating System 30

20. Demand Paging

virtual memory management는 디멘드 페이징(Demand paging)을 합니다. 디멘드 페이징은 위와 같은 4가지 정책(policy)을 따릅니다. page selection은 페이지 폴트가 발생했을 때 요청된 페이지만 읽어오는 것이 아니라 locality를 생각해 주변에 있는 페이지까지 읽어오는 것을 고려합니다. page replacement는 새로운 페이지를 메모리에 적재할 때 메인 메모리에 사용할 수 있는 페이지 프레임이 없다면 다른 프로세스의 페이지를 뺏어와야 하는데 수많은 페이지 프레임에서 어떤 것을 뺏어올지 결정해줍니다. page frame allocation은 같은 page frame pool에서 페이지 프레임을 할당하는 global allocation을 할지 아니면 프로세..

CS/Operating System 2024.01.26

19. Memory Management Mechanism

페이징 메커니즘은 현대 OS의 메모리 관리 기법을 구현하기 위한 핵심적인 메커니즘입니다. 이번에는 페이징 기법을 통해서 프로세스의 메모리를 효율적으로 관리하는 정책에 대해 알아보겠습니다. 프로세스 스케줄러를 설계할 때 정책과 메커니즘을 구별해서 설계해야 합니다. 어플리케이션 마다 사용하는 스케줄러 정책이 다를 수는 있지만 context switching 메커니즘은 동일하게 동작해야 합니다. OS의 메모리 관리 부분도 동일하게 적용되는데 이때 페이징 기법이 바로 메커니즘이 됩니다. 페이징 기법은 MMU라는 매핑 하드웨어로 페이지 테이블이라는 매핑 정보를 통해 CPU가 이슈한 로지컬 어드레스를 실제 피지컬 메모리 주소인 피지컬 어드레스로 변환을 해줍니다. 이렇게 매핑 하드웨어와 매핑 테이블 전체를 매핑 메커..

CS/Operating System 2024.01.25

18. Enhancing Mechanisms

segmentation, paged segmentation 이렇게 메모리 관리 기법에 대해 공부했지만 이 방법들은 현재 OS에서 사용하지 않는 방법입니다. 현대 OS는 페이징(paging) 만을 사용해서 메모리를 관리하는데 이때 사용하는 메커니즘들에 대해서 알아보겠습니다. 페이징은 굉장히 좋은 메모리 관리 기법이지만 메모리 액세스를 할 때마다 메인 메모리에 있는 페이지 테이블을 사용한다는 점과 페이지의 크기가 작고 로지컬 어드레스 스페이스가 크기 때문에 페이지의 개수가 많아지는 문제가 존재했습니다. 추가적인 메모리 레퍼런스를 한 번 더하는 문제와 페이지 테이블의 사이즈가 커져 메인 메모리에 자리를 많이 차지하는 문제가 존재 (slow memory access, large page table) Slow m..

CS/Operating System 2024.01.24

17. Paged segmentation

페이징은 fragmentation 문제를 해결할 수 있지만 page table의 오버헤드가 굉장히 커진다는 점과 segmentation과 유사하게 메모리를 access 할 때 추가적인 access가 필요하여 성능이 저하되는 문제가 있었습니다. 페이징만 적용한다면 프로세스 당 하나의 세그먼트밖에 없는 상태로 code sharing과 맞춤 protection이 불가능합니다. paged segmentation은 조금 복잡합니다. segmentation을 기반으로 하면서 paging을 더한 기법으로 프로세스가 여러 개의 세그먼트를 가지며 각각에 세그먼트에 페이징을 적용한다고 생각하시면 됩니다. 그래서 프로세스가 address translation을 하려면 세그먼트마다 별도의 segment table이 필요합니다..

CS/Operating System 2024.01.23

16. Segmentation

segmentation이란 하나의 프로세스가 여러 메모리 청크를 할당받아 작업하는 것을 의미합니다. 초창기 job의 경우 하나의 메모리 청크만을 할당받고 실행되었지만 메모리 청크 하나만을 할당받으면 여러 문제가 생깁니다. code 부분에 속하는 메모리의 경우 read operation만 실행하지만 data에 속하는 메모리의 경우 read와 write operation을 제공해야 합니다. (성격이 다른 두 메모리가 합쳐진 상태) code sharing 부분에서도 문제가 발생합니다. 여러 프로세스가 동일한 exe 파일을 실행할 때 코드를 공유할 때 메모리 영역이 하나의 청크로만 구성되어 있다면 공유할 수 없는 힙과 스택 그리고 공유가 가능한 코드 영역이 합쳐져 있어서 코드를 공유하지 못합니다. (코드와 he..

CS/Operating System 2024.01.10

15. Dynamic allocation in Linux

코드를 작성할 때 malloc 사용하면 heap segment의 일정 부분이 할당됩니다. 프로세스의 세그먼트 일부분을 할당할 때 리눅스가 heap을 어떻게 핸들링하는지 알아보겠습니다. OS에서는 프로세스의 memory context를 구성하는 기본 단위를 세그먼트라고 부르는데 리눅스에서는 virtual memory area(VMA)라고 부릅니다. virtual memory area은 각 프로세스들이 갖는 logical address space에 존재하는 일정한 메모리 영역입니다. 이런 세그먼트를 사용자가 직접 만들 수 있는데 이때 system call mmap이 사용이 됩니다. 위 사진은 리눅스가 관리하는 유저 프로세스의 메모리 레이아웃을 도식화한 것입니다. 파란색 박스는 세그먼트, VMA로 보면 됩니다..

CS/Operating System 2023.12.24

14. GNU Linker

GNU Linker란? C언어 코딩을 했을 때 컴파일 되는 가장 마지막 단계를 담당 컴파일할 때 사용하는 gcc -o test main.c 이런 명령어에서 gcc가 CNU C Compiler C 프로그래밍 파일의 경우 여러 soruce code 파일로 하나의 프로그램을 만들 수 있습니다. 이는 여러 개발자가 하나의 프로그램을 만들기 위해서 공동 작업을 할 때 서로 독립적으로 일하기 위한 결과로 볼 수 있습니다. 위 사진에서는 c파일, 소스코드 파일을 한꺼번에 컴파일하지만 별도로도 컴파일될 수 있습니다. 소스코드 파일을 독립적으로 컴파일하면 독립적인 오브젝트 파일이 생성되는데 이 .o 파일들을 묶어서 executable file, 위 사진에는 test라는 이름의 파일이 나오게 됩니다. 이런 executab..

CS/Operating System 2023.12.18

13. 힙(Heap)

이번 포스터에서는 static과 dynamic이 많이 등장하기 때문에 우선 이 단어들이 무엇을 의미하는지 알아보겠습니다. 먼저 static은 pre-runtime, offline과 동의어입니다. static scheduling처럼 앞에 static이 붙은 경우 pre runtime scheduling으로 프로그램 수행에 영향을 받지 않는 스케줄링을 말합니다. (수행되기 전 오프라인에서 스케줄링을 진행) static code analysis의 경우는 실행되기 전에 코드를 분석하는 것으로 컴파일러가 여기에 해당됩니다. 반대로 dynamic의 경우 online과 동의어면서 runtime 중에 동작을 진행합니다. static allocation과 dynamic allocation에 대해서 알아보겠습니다. 어떤 ..

CS/Operating System 2023.12.18

12. Deadlock solution

Banker's Algorithm 뱅커스 알고리즘의 핵심은 resource allocation state를 도입해 프로세스들이 현존하는 리소스들 중 얼마만큼을 할당 받았는지 표현하는 것입니다. safe state는 모든 프로세스들이 성공적으로 실행을 마칠 수 있는 sequence가 존재하는 상태이고 unsafe state는 프로세스들이 최대치의 리소스를 요청했을 때, 요청을 다 들어주지 못하고 데드락에 빠지는 상태입니다. unsafe state라고 해서 무조건 데드락에 걸리는 것이 아니라 모든 프로세스들이 자기들이 요구할 수 있는 최대치의 리소스를 요청할 때 발생하는 것입니다. 뱅커스 알고리즘은 safe state 상태일때 프로세스가 unsafe state로 state를 이동시키는 요청을 한다면 그 요청..

CS/Operating System 2023.12.12

11. Deadlock

데드락(deadlock)은 프로그램이 만들어야 하는 적정한 progress를 만들지 못하는 현상을 말합니다. 데드락에 대한 연구는 굉장히 많이 진행되어 solution들이 다수 존재합니다. 하지만 이 solution들은 비용이 굉장히 비싸기 때문에 실제로는 거의 사용이 되지 않습니다. 데드락은 두 개 이상의 프로세스가 동작할 때 발생하며 프로세스들이 waiting state에 빠져 어떤 동작도 하지 못하게 됩니다. 왜 이런 일이 발생하냐면 서로가 서로에게 점유되어있는 리소스를 기다리기 때문입니다. 데드락 외에도 라이브락(livelock)이라는 현상이 있는데 라이브락의 경우 데드락과 다르게 CPU 사이클을 낭비하기 때문에 시스템에 주는 악영향이 더 큽니다. 라이브락은 spin lock을 통해서 발생할 수 ..

CS/Operating System 2023.12.10
반응형