CS 37

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

10. 모니터(Monitor)

세마포어는 P, V 오퍼레이션을 fair하지 않을 때 문제가 발생하며 소프트웨어 툴이 발견할 수 없다는 측면에서 race condition 버그를 자주 발생시킵니다. 대부분의 경우 하나의 프로세스에서 발생하지 않고 여러 개의 프로세스들이 유기적으로 동작할 때 나타나는 경우가 많습니다. 이런 문제를 해결하기 위한 structured sychronization preemptive가 모니터(Monitor)입니다. 세마포어가 너무 로우레벨이여서 버그를 발생하는 일이 자주 일어납니다. 하이레벨로 코딩을 할때는 자동적으로 synchronization을 해주는 모니터가 존재합니다. 이전에 배운 spin lock이나 disable interrupt는 하드웨어적인 preemptive이고 세마포어는 OS가 제공해주는 소프..

CS/Operating System 2023.12.06

9. 세마포어(semaphore)

지금까지 OS가 지원해주는 synchronization preeptive들 중 세마포어에 대해서 공부했습니다. 이번에는 OS 내부에서 세마포어를 어떻게 구현하는지에 대해서 알아보겠습니다. 세마포어는 인티저(integer) 변수로 availavle한 리소스 인스턴스의 개수를 표현하는 인티저 값 입니다. 일반적인 경우 0과 1값을 가지지만 리소스 인스턴스가 여러 개가 있는 경우 counting semaphore라고 하여 사용가능한 리소스 인스턴스 개수만큼 값을 설정합니다. 세마포어를 구현할 때 인티저 카운터 변수외에 queue structure가 필요합니다. P 오퍼레이션을 했을 때 세마포어를 획득하기 못했을 때 대기해야 하는 프로세스들에게 사용하기 때문입니다. P, V 오퍼레이션은 다음과 같이 구현됩니다...

CS/Operating System 2023.11.26

8. 동기화(Synchronization)

synchronization에 대해서 이야기하려면 2개 이상의 프로세스가 필요합니다. synchronization 문제는 논리적 연관성이 있는 프로세스들에서도 일어날 수 있지만 아무런 logical 한 연관성이 없는 프로세스라고 하더라도 서로 컴퓨터 시스템 내에서 자원을 공유하기 때문에 synchronization로 인한 문제가 발생할 수 있습니다. synchronization 문제는 data sharing이나 resource sharing으로부터 발생합니다. 이러한 문제는 오퍼레이션이 진행 중 interrupt service routine이 일어나 값을 바꾸는 상황에서 발생합니다. 그래서 오퍼레이션이 interrupt service routine에 방해를 받지 않는 상태를 만들어야 합니다. 이런 영향을..

CS/Operating System 2023.11.20
반응형