이번주차 과제는 c로 malloc, free 구현이다.
즉, 동적할당을 직접 구현해보는 것이다.
하라는데 하기가 싫다.
적어도 내가 왜 이걸 구현 해야하는지, 무슨 도움이 될지 알아야겠다.
그래서 가상메모리의 정의와 기능, 중요한 이유. 그리고 동적할당을 구현했을 때 앞으로의 나에게 무슨 도움이 될지 알아보았따.
한 시스템의 프로세스들은 CPU와 메인 메모리를 다른 프로세스들과 공유한다.
그러나, 말이 쉽지 메인 메모리를 공유하는 것은 어려움을 많이 만난다.
예를 들어, CPU에 대한 요구가 증가함에 따라 프로세스들은 점점 느려진다.
또한, 너무 많은 프로세스들이 너무 많은 메모리를 요구하면 일부는 실행할 수 도 없게 된다.
또 다른 예로, 메모리는 손실에 취약하다. 만일 일부 프로세스가 무심코 다른 프로세스가 사용하고 있는 메모리에 쓰기 접근을 하려고 한다면, 이 프로세스는 프로그램의 논리와 전혀 무관하게 황당한 방식으로 실패하게 될 수도 있다.
Virtual Memory
(VM, 가상메모리)
위와같은 어려움을 해결하기 위해 나온 가상메모리는메모리를 보다 효율적이고 더 적은 에러를 갖도록 관리하기 위해 현대의 시스템은
가상메모리(Virtual Memory)라고 알려진 메인 메모리의 추상화를 제공한다.
가상 메모리는 각 프로세스에 하나의 크고 통합된 사적 주소공간을 제공한다.
이것은 하드웨어 예외, 하드웨어 주소번역, 메인 메모리, 디스크 파일, 커널 소프트웨어들 사이의 상호작용이다.
가상메모리는 한개의 메커니즘을 통해 세개의 중요한 기능을 제공한다.
1. 메인 메모리를 디스크에 저장된 주소공간에 대한 캐시로 취급해서 메인메모리 내 활성화 영역만 유지하고 데이터를 디스크와 메모리 간에 필요에 따라 전송하는 방법으로 메인 메모리를 효율적으로 사용한다.
2. 각 프로세스에 통일된 주소공간을 제공함으로써 메모리 관리를 효율적으로 사용한다.
3. 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호한다.
위와 같은 기능들 때문에 가상메모리라는 아이디어는 컴퓨터 시스템에서 위대한 아이디어라고 한다.
이 기술의 성공에 대한 주요한 이유는 이것이 개발자의 개입 없이 조용하고 자동으로 동작한다는 점이다.
!! 그렇다면 가상 메모리는 우리가 볼 수 없는 곳에서 잘 동작하는데, 왜 개발자 지망생인 우리가! 이해하고 구현해야 하는 걸까?!
여기에는 3가지 이유가 있다.
1. 가상 메모리가 중심이다.
가상메모리는 모든 컴퓨터 수준에 스며들어 있으며, 하드웨어 예외, 어셈블러, 링커, 로더, 공유 객체, 파일, 프로세스를 설계하는데 중요한 역할을 수행한다.
가상 메모리를 이해한다면 어떻게 시스템이 일반적으로 동작하는지 더 잘 이해할 수 있을 것이다.
2. 가상메모리는 powerful~하다.
가상메모리는 응용에 메모리 블록을 생성하고, 없애고, 메모리 블록을 디스크 파일의 부분으로 매핑하고, 메모리를 다른 프로세스들과 공유할 수 있는 강력한 기능을 준다.
예를 들어, 메모리 위치에서 읽고 쓰는 것으로 디스크 파일의 내용을 수정하거나 읽을 수 있다는 사실을 알고 있었는가 ? 또는 파일의 내용을 메모리로 명시적인 복사를 하지 않고도 로드할 수 있다는 사실을 알고 있었는가 ?
가상 메모리를 이해하면 가상메모리의 강력한 성능을 여러분의 응용프로그램에 적용하는데 도움이 될 것이다.
3. 가상메모리는 위험하다!
응용프로그램은 이들이 변수를 참조하고, 포인터를 역참조하고 malloc 같은 동적 할당 패키지로 호출할 때마다 가상메모리와 상호작용한다. 만일 가상메모리가 잘못 사용되면, 응용프로그램은 당혹스럽고 퍼져나가는 메모리 관련 버그로부터 괴로움을 당할 수 있다. 또한, 잘못된 결과로 프로그램이 끝까지 실행될수도 있다.
가상메모리와 이를 관리하는 malloc 같은 할당 패키지를 이해하면 이러한 에러를 피하는데 도움이 될 것이다.
즉, 가상 메모리를 이해하면 컴퓨터가 어떻게 전체적으로 돌아가는지 이해하는데에 도움이 되고 가상메모리의 강력한 성능을 우리의 프로그램에 적용시켜 성능을 향상시킬 수 있을 뿐 아니라, 가상 메모리 관련 에러를 만났을 때 두려워하지 않을 수 있다.
(에러는 언제나 무섭다)
한마디로, 고오급 개발자가 되기 위해서 알아야하는 필수 덕목이다. 정도로 이해를 했다.
참고 문헌
Computer Systems : A Programmer's Perspective (Bryant O'Hallaron)
오늘은 정글 전체 회식하는 날이다. 고기를 먹으러 가보쟈....
이 글을 보는 모두 열코다 🔥!
'SW정글사관학교' 카테고리의 다른 글
[SW 정글] 5/7~11 TIL 가상메모리 - 주소번역, TLB, 메모리 계층구조, malloc 구현 (2) | 2022.05.11 |
---|---|
[SW 정글] 5/6 TIL 가상메모리 (2) | 2022.05.07 |
[SW 정글] 5/1 ~ 5/4 TIL RB Tree (feat, C) (1) | 2022.05.04 |
[SW정글] 4/30 TIL - pointer -> Linked List, Queue(feat, C) (0) | 2022.04.30 |
[SW정글] 4/29 TIL - 메모리 누수, 균형이진트리, RB TREE(feat, C) (0) | 2022.04.30 |