[TIL] 260923 공부기록
프로세스 공부와 포인터 구조체 개념공부
TIL#
오늘은 어제 퀴즈 이후로 다시 복기해야 될 것 같아서 헷갈렸던 부분들을 다시 바로잡았다.
특히 최근 들어 스택 공부를 많이 했는데, 스택뿐만 아니라 전체적으로 내 블로그를 다시 보면서 모르는 건 CSAPP를 조금 읽어보고 GPT로 컴퓨터 구조 글도 조금 훑어봤다. 그렇게 하면서 헷갈렸던 부분들을 다시 하나씩 바로잡은 것 같다.
오전에는 이런 공부를 했고, 오후에는 1번 문제를 다시 보기 위해 내가 1번을 어려워했던 이유와 문제점을 먼저 파악했다. 그리고 정리한 내용을 바탕으로 GPT에게 문제를 만들어달라고 한 후 10문제 정도 풀었다.
놀랍게도 개념 자체에 빵꾸가 나있던 상황이었다…;;;
배운점#
지금까지 스택을 공부하면서 가상메모리의 스택을 공부했는데, 그 가상메모리가 외부에 어디에 있는지를 몰랐다.
분명 CSAPP를 읽었는데 프로세스에서 어떤 것들이 동작하는지를 제대로 몰랐던 것이었다. 그래서 다시 공부했고, 이번에 프로세스에 대해서 어느 정도 이해하게 되었다.
프로세서는 CPU인데 이게 한 끗 차이로 매번 헷갈렸고, 프로세스는 프로그램이 실행된 상태라고 생각하면 편했다.
프로세스를 실행할 때는 가상메모리와 스레드 같은 것들이 필요하고, 가상메모리 안에는 스택, 힙, 코드 등이 들어있다.
지금까지 나는 가상메모리와 메인메모리의 관계도 제대로 몰랐었다. 프로세스를 실행하면 OS의 도움으로 가상주소를 사용하고, 주소 변환을 거쳐 RAM의 메인메모리에서 사용할 물리주소로 바뀐다는 것도 다시 공부했다.
결국 가상주소를 사용하는 공간은 실제 메모리를 그대로 사용하는 게 아니라, 프로세스가 자신만의 메모리 공간을 가지고 있는 것처럼 사용하는 가상의 주소 공간이었다.
두 번째로는 포인터와 구조체에 대해서 공부했다.
free()를 하면 값을 못 쓰게 되는 이유도 다시 정리했다. 단순히 값이 사라지는 게 아니라, 해당 메모리를 사용할 수 있는 수명이 끝났기 때문에 그 주소를 계속 사용하면 문제가 생긴다는 걸 알게 되었다.
그리고 배열 포인터 문제를 풀면서 배열을 3개 만들었다고 해서 객체가 3개 만들어지는 게 아니라, 포인터 3개가 각각 같은 객체나 서로 다른 객체를 가리킬 수 있다는 것도 알게 되었다.
포인터는 결국 주소를 저장하는 변수라서, 주소를 복사하면 포인터 두 개가 하나의 객체를 가리킬 수도 있다는 것도 다시 이해했다.
느낀점#
내일 추석이라서 집중이 안 될 줄 알았는데, 생각보다 해보려고 했던 목표를 절반 이상은 했던 것 같다.
동석 코치님께서 구조체를 공부하라고 했었는데, 왜 말씀하셨는지 또 깨달음을 얻게 되었다. 빵꾸 나있는 개념들을 오늘 메꾸는 데 시간을 많이 할애했지만, 다시 1번 문제를 마주하게 된다면 풀 수 있을지도 모르겠다.
오늘은 메타인지가 조금 중요하다고 느낀 날이었다. 내가 어떤 부분이 부족한지는 어느 정도 분석할 수 있는데, 결국 문제는 그걸 실제 문제 해결까지 연결하지 못한다는 것이었다.
그래도 오늘은 부족했던 개념들을 직접 찾아보고 다시 문제를 풀어보면서, 지금 내가 어디에서 막히는지 조금 더 알게 된 것 같다.
부족하지만 지금 필요한 개념들을 공부했던 것 같아서 오늘 하루는 이렇게 마무리할 수 있을 것 같다.