Operating System
2주차 - 버퍼 오버플로우, 가상 메모리 관점에서 보기
C에는 배열 경계 검사가 없다는 사실에서 출발해서, 스택과 힙에서 버퍼 오버플로우가 실제로 어떤 메모리를 덮어쓰는지 가상 메모리 구조로 정리.
이번 주에 배우고 이해한 것들.
C에는 배열 경계 검사가 없다는 사실에서 출발해서, 스택과 힙에서 버퍼 오버플로우가 실제로 어떤 메모리를 덮어쓰는지 가상 메모리 구조로 정리.
타입 정보가 없는 C/C++ 환경에서 BDWGC가 스택과 힙을 워드 단위로 훑어 포인터로 의심되는 값을 마킹하는 방식과, 그로 인해 생기는 오탐 문제를 정리.
Eden/S0/S1/Old로 나뉜 Java의 세대별 힙 구조와 Minor/Full GC의 동작, identity hash code로 객체 동일성을 보증하는 방식, TLAB 덕분에 new()가 malloc()보다 빠른 이유까지.
Mark & Sweep 알고리즘이 루트에서 시작해 도달 가능한 객체를 표시하고 나머지를 회수하는 원리와, 루트가 될 수 있는 세 부류를 정리.
재할당과 객체 수정(mutation)을 구분해서, 파이썬의 인자 전달 방식(Call by Object Reference)이 실제로 어떻게 동작하는지 정리.
참조 카운팅이 주력이고 추적 GC가 보조인 파이썬 GC 구조를, CSAPP의 가비지 컬렉터 정의부터 순환 참조와 세대별 수집까지 정리.
super()는 부모가 아니라 MRO상 다음 클래스를 가리킨다는 것부터, ABCMeta의 __subclasshook__과 register()로 상속 없이 서브클래스 판정이 이뤄지는 원리까지.