이번 주의 키워드는 Virtual Memory, Page Table, Swap in/out, Page Replacement이다. 이번 과제를 진행하면서 가장 힘들었던 점은 함수들이 아주 잘게 쪼개져 있는데, 각 함수가 정확히 어떤 책임을 지고 있는지 파악하고 구분하는 일이었다. 예를 들어 processcleanup()을…
이번 주차 키워드는 다음과 같다: User program, User mode, Kernel mode, System call, Virtual memory layout. syscall()과 doiret()으로 User space와 Kernel space를 넘나드는 방법을 학습했다. Pintos를 진행하며 느끼는 점은, OS라…
이번 주는 대망의 핀토스를 시작했다. 학습 키워드는 다음과 같다: threads, synchronization, priority scheduling, priority inversion, MLFQS(Multi Level Queue Scheduling). 이번 주는 학습에도 구현에도 AI를 전혀 쓰지 않는 방식을 택했다. 원…
이번주의 학습 키워드는 BSD Socket, IP, TCP, HTTP, File Descriptor, DNS이다. 초반 하루 정도는 개념 학습에 할애하고, 이후 코드를 작성하는 흐름으로 진행했다. 대부분의 기능을 library로 처리하다 보니 코드는 간결해졌고 전체적인 구현 패턴은 익힐 수 있었으나, 추상화된 계층 아래에…
읽기네트워크 통신은 본질적으로 서로 다른 두 호스트에서 실행 중인 process 간의 데이터 교환이다. 하지만 브라우저나 웹 서버 같은 application이 물리적인 네트워크 인터페이스 카드(NIC)를 직접 제어하여 패킷을 쏘는 것은 불가능하다. 운영체제는 하드웨어 자원을 보호하고 다중 process 환경을 안정적으로 통제…
이번주는 CS:APP3e Lab Assignments의 malloc lab을 구현해보는 시간이었다. 학습 키워드는 시스템 콜, 데이터 세그먼트, 메모리 단편화, sbrk/mmap이다. 이 중 상당수는 지난 포스트에서 개념을 정리해두었다. 이번에는 그걸 실제 구현으로 옮겨보는 과정이었다. malloc을 구현하는 방법은 여러…
읽기프로세스는 물리적 하드웨어를 직접 제어할 권한이 없다. 메모리 접근은 CPU 내부의 Mode bit와 권한 수준(Privilege Level)에 의해 철저히 통제된다. CPU는 명령어의 종류에 따라 실행 권한을 제한한다. 메모리의 상태를 변경하거나 외부 장치를 제어하는 특권 명령어(Privileged Instruction…
파이썬에서 C언어로 넘어오며 익숙해지려고 Linked list의 기본 구조를 바탕으로 포인터와 malloc, free 연습을 했다. 이번 문제들은 그닥 어렵지 않아서 전부 풀 수 있었는데, 그래서인지 오히려 어셈블리어나 내부 구조에 더 관심이 생겼던 것 같다. 어셈블리어로 코드가 어떤 식으로 메모리를 활용하는지 뜯어보고,…
이번 주차의 알고리즘 키워드는 다음과 같다: Dynamic Programming(동적 계획법), Greedy Algorithm(탐욕 알고리즘). 전반적으로 지난 주차들에 다루었던 접근 방식과 크게 다르지 않아 적응하는 데 어려움은 없었다. DP는 이름만 거창할 뿐 사실상 재귀에 메모 기능을 더한 것과 다를 바 없었고, 그…
파이썬은 내부적으로 CPython으로 구성되어 있어, C언어의 컴파일 과정을 살펴보면 그 구조를 파악하기 쉽다. 우선 C언어의 컴파일 과정은 다음과 같다: 1. 소스 코드를 Preprocessor가 이 붙은 구문들에 따라 치환하고 붙여넣어 준다. 2. 그렇게 만들어진 .i로 끝나는 새로운 C언어 파일을 컴파일러가 받는다.…
개발을 하다 보면 남이 쓴 코드를 읽고, 새로운 기술을 도입할 때 그 정확한 역할과 동작을 파악하기 위해 방대한 코드를 따라가며 이해해야 하는 경우가 많다. 이번 Virtual DOM을 구현하면서 남의 코드를 어떻게 학습해야 하는지 감이 잡혔다. 이론은 명저를 통해 다지고, 실습은 깃허브에 올라온 실제 서비스의 코드를 읽…
이번주 알고리즘의 키워드: 이분 탐색, 분할 정복, 퀵정렬, 머지정렬, 스택, 큐, 우선순위 큐, 연결 리스트, 해시 테이블 이번주도 저번이랑 비슷했다. 가장 어려웠던 건 '중' 난이도 문제들이 저번보다 까다로워져서 반 정도밖에 못 풀었다는 점이다. 부족한 실력을 채우려고 리트코드에서 '하'와 '중' 사이 난이도의 문제들…
AI 시대에 알고리즘을 왜 배워야할까? 나는 이전 세대의 사람들이 알고리즘을 공부해왔다는 이유만으로 관성처럼 똑같이 하는 분위기가 싫었다. AI 시대에는 새로운 공부 방법이 등장해야 한다는 사실에 동의한다. 그래서 무언가에 익숙해지기 위한 '최소한의 절대 시간'을 넘기면 학습 곡선이 급격하게 올라가는 구조를 만들고 싶었다…

기본기가 탄탄한 개발자가 되고 싶다! 항상 그렇게 생각했지만 기본기가 뭔지 모르겠고, 막상 이론을 배워도 이게 실제로 쓰이나? 싶은 생각에 머릿속에 남지 않는 경우가 많았다. 이론과 실전을 잇는 무언가가 있으면 좋겠다고 생각했는데, 정글 커리큘럼이 내 생각과 딱 들어맞는다고 생각해서 참여하게 되었다. 또한 정글에서 강조하…
읽기