프로세서가 일을 많이 하려면 메모리에 있는 프로세스의 수가 많아야 합니다. 하지만 프로세스의 수와 프로세서의 이용률이 반드시 비례하는 것만은 아닙니다. Thrashing 프로세스의 수가 많아진다는 것은 한 프로세스가 차지하는 프레임이 줄어듦을 의미합니다. 때문에 원하는 Page가 메모리에 없는 Page Fault가 자주 일어나게 됩니다. Page Fault에 의한 Page Replacement를 하는 동안 프로세서가 일을 못하기 때문에 결국 프로세서 이용률이 떨어집니다. 이러한 문제를 Thrashing이라고 하는데, 각 프로세스마다 가질 수 있는 프레임을 설정하여 해결할 수 있습니다. 프로세스마다 자신이 쓰기에 충분한 메모리 용량을 할당받는다면 Page Fault의 빈도가 줄어들 것입니다. Static ..
프로그램이 실행되기 위해선 반드시 RAM에 프로그램이 적재되어야 합니다. 그런데 사용하려는 프로그램들의 용량 합이 RAM의 용량보다 크다면 해당 프로그램들을 동시에 돌릴 수 없게 됩니다. 이런 문제점을 해결하기 위해 Backing Store에 프로세스의 사용하지 않는 부분을 저장시켜놓고 사용하는 부분만 RAM에 올려서 사용한다면 마치 SSD의 일부를 RAM과 같이 사용하는 것과 비슷한 효과를 낼 수 있습니다. 이렇게 SSD를 사용하면 마치 가상의 커다란 RAM을 사용하는 것과 같은데, 이를 가상 메모리라고 합니다. Demand Paging 프로그램은 여러 개의 Instruction으로 이루어져 있지만 사용자가 프로그램의 모든 기능을 한 번에 사용하지는 않습니다. 이런 점을 고려했을 때, SSD에서 사용할..
Paging은 프로세스를 물리적으로 일정한 크기의 Page로 나누고 메모리도 일정한 크기의 Frame으로 나눠서 Page를 Frame에 넣는 방식으로 메모리에 위치시키는 방식이며, Page Table을 통해 주소변환을 할 수 있습니다. 반면, 이번 포스팅의 주제인 Segmentation은 프로세스를 논리적으로 나눈 Segment를 메모리에 위치는 방식입니다. Segmentation Segmentation은 프로세스를 논리적으로 나눠 Segment의 크기가 가변적이므로 Frame의 크기도 일정하지 않습니다. 따라서 Segment를 Segment Table을 통해 메모리에 위치시키기 위해서 추가 요소가 필요합니다. Paging에서는 Page Number에 맞는 Frame Number를 찾고 Offset을 고..
운영체제의 주된 기능인 프로세스 관리를 마무리하고 주기억장치 관리로 넘어가 볼까 합니다. 컴퓨터의 RAM은 항상 부족한 상태에 놓여있기 때문에 주기억장치 관리는 운영체제의 중요한 요소 중 하나입니다. Loading 프로그램의 소스 코드는 컴파일러와 어셈블러를 거쳐 기계어로 번역됩니다. 링커는 SSD를 뒤져서 번역된 오브젝트가 실행되기 위한 라이브러리를 묶어줍니다. 링커에 의해 실행 파일이 생성되며, 생성된 파일은 로더에 의해 메모리에 적재됩니다. Memory Structure 메모리로 적재된 프로세스는 크게 4가지 영역으로 구분됩니다. code 영역에는 프로세서가 실행할 기계어 코드가 저장됩니다. data 영역에는 코드에서 생성된 전역 변수, 정적 변수, 배열 그리고 구조체 등이 저장됩니다. stack ..
스케쥴링을 알아볼 때, 한 프로세스에서 다른 프로세스로 넘어가는 Context Switching을 알아봤었습니다. 프로세스는 최소 하나의 Thread라는 것을 포함하는데 사실 프로세스를 진행시키는 것은 Thread를 진행시키는 것입니다. 한 프로세스 내의 여러 개의 Thread가 스위칭되며 진행될 때 한 프로세스가 여러 동작을 하는 것처럼 보이고, 여러 프로세스의 여러 개의 Thread가 스위칭되며 진행될 때 여러 개의 프로세스가 동시에 동작되는 것처럼 보이게 됩니다. 따라서 Context Switching에서의 스위칭되는 요소는 사실 프로세스가 아니라 Thread라고 할 수 있습니다. 현대의 OS는 프로그램을 Thread단위로 실행하기 때문에 Thread에 대하여 더 알아볼 필요가 있습니다. 지난 포스..
- Total
- Today
- Yesterday
- 최단경로 알고리즘
- WWDC17
- 코딩대회
- WWDC19
- IOS
- observeOn
- 네트워크 유량
- Testable
- 최단경로문제
- 에드몬드 카프 알고리즘
- CompositionalLayout
- 부스트캠프 6기
- 벨만포드 알고리즘
- 최대 매칭
- State Restoration
- WWDC21
- 최단경로 문제
- CPU와 Memory
- HIG
- 다익스트라 시간복잡도
- mach-o
- WWDC16
- 강한 순환 참조
- 컴퓨터 추상화
- 벨만포드 시간복잡도
- MeTal
- test coverage
- rxswift
- 네트워크 플로우
- 포드 풀커슨 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |