일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 10871
- 시험 성적
- 세 수
- 1110
- 1065
- 자바스크립트
- 가상 화폐
- for문 사용해보기
- Dapp
- 더하기 사이클
- X보다 작은 수
- 1%d
- 함수 사용하기
- 알고리즘 문제풀이
- 평균은 넘겠지
- 백준
- 비트 코인
- Mist
- Baekjoon
- 이더리움
- Remix
- if문 사용해보기
- 그대로 출력하기
- 블록 체인
- 10817
- 1546
- 2448
- 단계별로 풀어보기
- 별 찍기 - 11
- 솔리디티
- Today
- Total
목록Technology (82)
블링블링 범블링
- 페이지 교체(1) - 요구 페이징은 요구되어지는 페이지만 backing store에서 가져와 메인 메모리에 적재하는 방법이다. 필요한 페이지만 메인 메모리에 올리므로 메모리의 낭비를 줄이는 방법으로 사용되었다. valid 비트를 추가한 페이지 테이블과 필요하지 않은 페이지를 보관하는 backing store를 가지고 기능을 수행할 수 있다. 하지만 프로그램 실행이 계속 진행되게 되면 요구 페이지가 늘어나게 되고 언젠가는 메모리가 가득 차게 될 것이다. 페이지를 backing store에서 가져와 메모리에 올려야 되는데 메모리에 자리가 없는 것이다. 이럴 경우 메인 메모리에 있는 특정 페이지를 내보내야할 필요가 있다. 그 자리에 필요한 다른 페이지를 올려야한다. 이를 페이지 교체라고 한다. 메모리가 가..
프로세스를 메인 메모리에 적재할 때 모든 부분을 다 올리게 되면 메모리 공간이 많이 부족하게 된다. 따라서 프로세스를 적재를 할 때 지금 당장 필요로 하는 코드의 부분만 올리는 방법을 택하여 프로세스들이 다 메모리상에 올라와 있는 것처럼 보이게 하여 메모리 공간이 더 커보이게 보인다. 이러한 방법이 바로 가상 메모리를 사용하는 것이다. 가상 메모리는 요구 페이징 기법을 사용하여 메모리에 올리게 된다. 프로세스는 페이지의 집합이므로 지금 필요한 페이지만 메모리에 올리고 사용하지 않는 페이지들은 backing store에 저장한다. 페이지 테이블은 메인 메모리에 적재되어 있는지 backing store에 있는지를 구분하는 valid 비트를 가지게 된다. 메인 메모리에 있는 페이지는 CPU가 요구할 시 페이지..
메인 메모리의 크기가 한정되어 있으므로 물리적인 메모리 크기보다 크기가 큰 프로세스를 실행시킬 수 없다. 예로 100MB 메인 메모리에서 200MB 크기의 프로세스를 실행할 수 없게 되는 것이다. 그렇다면 메인 메모리보다 크기가 큰 프로세스를 실행시키고 싶으면 어떻게 해야 할까? 단순히 메인 메모리가 더 큰 컴퓨터를 사용해야하는가? 이런 방법은 매우 비효율적일 것이다. 그래서 나온 방법이 바로 가상 메모리이다. 프로세스의 모든 코드는 항상 필요한 것이 아니다. 오류 처리하는 부분이나 필요 없는 배열 부분은 실제로 프로세스가 잘 동작한다면 필요 없는 부분이 된다. 따라서 프로세스는 필요한 부분만 메모리에 올림으로써 메인 메모리에 올라가는 프로세스의 크기를 줄인다. 프로세스 이미지를 모두 메모리에 올릴 필요..
앞선 장들에서 페이징을 배우면서 프로세스를 일정 크기인 페이지 단위로 잘라서 메모리에 적재하는 방법을 알았다. 페이지는 정확하게 일정한 간격으로 자르는 단위였다. 하지만 프로세스를 물리적인 단위인 페이지 말고 논리적 내용 단위인 세그먼트로 자를 수 있는 세그먼테이션 방법이 있다. 예를 들면 우리가 돼지를 잡아서 보관을 한다고 생각해보자. 페이징의 방법을 사용하면 돼지를 모두 같은 단위로 잘라서 보관을 하는 것이다. 반면에 세그먼테이션은 부위별로 다른 크기로 잘라서 보관하는 것이다. 세그멘테이션은 프로세스를 세그먼트의 집합으로 생각한다. 사실 하나의 프로세스가 동작하려면 기본적으로 코드, 데이터, 스택 세 가지의 세그먼트는 항상 가지고 있다. 그리고 더 들어가 보면 코드에서도 main 함수가 있을 수 있고..
- 페이징(1) - 메모리의 낭비 공간인 hole을 최소한으로 만들기 위해 앞 장에서 많은 방법을 사용하였다. 최초 적합과 최적 적합을 통해 메모리의 공간에 적재하는 방식에 변화를 주었는데 이를 통해서도 메모리 공간의 1/3 정도가 낭비가 되었다. 이렇기 때문에 다른 방식인 Compaction이라는 방식을 사용하였으나 프로세스나 hole을 메모리 공간에서 이동시키기 위해서는 메모리 계산의 부담이 발생하기 때문에 힘들었다. 그래서 사용한 방식이 바로 페이징이다. 페이징은 프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재하는 방식이다. 프로세스는 항상 연속해서 들어가야 한다는 생각을 통해 메모리 공간 활용에 있어서 앞장에서는 연속 메모리 할당에 초점을 맞추었다. 이런 생각부터 뒤집어서 프로세스를 일정한 ..
컴퓨터의 구조가 발달되어 오면서 운영체제는 다중 프로그래밍 환경을 조성하게 된다. 부팅 직후 메모리에 운영체제가 하드디스크로부터 적재되고 컴퓨터가 동작을 하는 것을 기다린다. 그 후 여러 가지의 프로그램이 동시에 올라와서 스케줄링에 의해 CPU나 I/O를 할당받는다. 처음에 부팅 직후에는 운영체제만 적재되어 있으므로 운영체제를 제외한 공간이 모두 비어 있게 된다. 그래서 big single hole이 생기게 된다. 이 후 프로세스가 생성되고 종료되는 작업을 반복하며 컴퓨터가 동작하게 된다. 이 때는 프로세스들은 여러 위치의 메모리에 적재되기 때문에 scattered holes가 생성되게 된다. 프로세스가 순서대로 쌓이더라도 작업이 끝나는 순서는 정해져 있지 않고 다시 들어오는 프로세스와도 메모리 공간 차..
하드디스크에 존재하는 프로그램들은 메모리의 특정 부분에 적재되어 실행이 된다. 프로그램이 만들어지기 까지 소스 파일, 목적 파일, 실행 파일을 거쳐 로더에 의해 메모리에 올려 지게 되는데 적절한 위치에 적재를 해야 실행을 시킬 수 있다. 앞 장에서 MMU의 재배치 레지스터를 이용하면 부분적으로 적절한 위치에 프로그램을 올릴 수 있다. 이번 장에는 이를 더 넘어가서 어떻게 하면 더 효율적으로 프로그램을 올릴 수 있는지, 메모리 보호를 위해서 메모리를 낭비하는 것을 방지하는 어떤 방법을 사용해야 하는지에 대해 학습 할 것이다. MMU가 메모리 관리를 하는 방법에 대해서 조금 더 상세히 들어가 보자. MMU는 프로그램이 동작할 때 필요한 데이터나 동작들을 메모리의 특정 주소 위치로부터 가지고 와야 하는데 이는..