참고 문서에서 List에 적혀있는 주석들을 대강 훑어보라고 권고하고 있다.
내용을 요약하면 다음과 같다.
일반적으로 연결 리스트는 노드를 생성하고, 그 안에 내용물을 담았다. 그러나 pintos에서는 객체 안에 list_elem 타입의 멤버를 추가해 연결하고 있다. 이 방식을 intrusive linked list 라고 표현하는 것 같다**.**
intrusive linked list를 사용한 이유는 C언어에서는 동적으로 할당한 메모리를 직접 관리해줘야하기 때문으로 보인다. 리스트에 연결하기 위해서 노드를 생성하고, 작업을 꺼낸 다음에는 노드를 해제해야한다. C언어에서는 이 과정을 직접 해두어야해서 번거롭다. 따라서 메모리 효율성과 복잡도를 낮추기 위한 선택지로 보인다.
그러면 파이썬같은 managed 언어는 어떨까? 이럴 경우에는 C언어에 비해 intrusive linked list를 선택할 이유가 줄어든다. 왜냐면 GC가 있어, 자동으로 메모리를 정리해주기 때문이다. 또, linked list를 사용하기 보다는 동적 배열을 주로 사용한다. AI말로는 동적 리스트가 더 빠르다고도 한다. 그래서 intrusive linked list라는게 항상 매리트가 있는게 아닌것 같다. 자세한 내용은 CS를 더 공부하면서 파보아야할 것 같으니, 여기까지만 알아두는게 좋겠다.
https://casys-kaist.github.io/pintos-kaist/project1/introduction.html