2026/03/31 19

컴퓨터시스템 기초 19. 분산 메모리와 가속기는 한 머신 밖에서 무엇을 바꿀까

[컴퓨터 시스템] 19. 분산 메모리와 가속기는 한 머신 밖에서 무엇을 바꿀까 18편까지는 한 머신 안에서 여러 코어와 스레드를 어떻게 다루는지 보았습니다. 마지막으로는 메모리를 공유하지 않는 여러 머신이나 특수 하드웨어가 등장할 때 계산 모델이 어떻게 달라지는지 보겠습니다.이번 글은 MPI, GPU, cloud, MapReduce를 키워드 나열로 끝내지 않고, '데이터와 실행 자원이 멀어질수록 무엇이 달라지는가'라는 하나의 관점으로 묶습니다. 먼저 짚고 갈 용어 distributed memory: 여러 노드가 각자 자기 메모리를 갖고 메시지로 협력하는 구조MPI: 프로세스들이 메시지를 주고받으며 협력하도록 돕는 대표 모델accelerator: 특정 계산을 더..

컴퓨터시스템 기초 18. 스레드와 동기화는 왜 멀티코어에서 필수가 될까

[컴퓨터 시스템] 18. 스레드와 동기화는 왜 멀티코어에서 필수가 될까 여러 프로세스를 봤다면, 이제 한 프로세스 안에서 여러 실행 흐름이 동시에 움직이는 스레드를 볼 차례입니다. 멀티코어 시대의 성능 이야기는 결국 동시성과 동기화 문제를 피해 갈 수 없습니다.이번 글은 스레드를 가볍게 소개하는 수준이 아니라, 왜 공유 상태가 문제를 만들고 왜 동기화가 필요해지는지를 중심으로 정리합니다. 먼저 짚고 갈 용어 thread: 같은 프로세스 자원을 공유하면서 실행되는 개별 실행 흐름synchronization: 동시에 접근하는 공유 상태를 올바르게 조율하는 규칙race condition: 실행 순서에 따라 결과가 달라지는 위험한 상황 ..

컴퓨터시스템 기초 17. 시스템 호출과 IPC는 프로세스 사이를 어떻게 잇는가

[컴퓨터 시스템] 17. 시스템 호출과 IPC는 프로세스 사이를 어떻게 잇는가 16편에서 프로세스와 가상 메모리를 봤다면, 이제 서로 격리된 실행 단위가 운영체제와 어떻게 대화하고, 또 서로 어떻게 협력하는지 봐야 합니다. 바로 시스템 호출과 IPC가 그 경계면을 드러냅니다.이번 글은 사용자 프로그램과 커널의 경계, 그리고 프로세스 사이 통신을 하나의 흐름으로 묶어 설명합니다. 먼저 짚고 갈 용어 system call: 사용자 프로그램이 운영체제 서비스에 공식적으로 요청하는 진입점kernel: 운영체제의 핵심 권한 영역IPC: 프로세스 사이 통신 기법 이번 글에서 다루는 것 왜 시스템 호출이 필요한지사용자 공간과 ..

컴퓨터시스템 기초 16. 운영체제는 프로세스와 가상 메모리를 어떻게 관리할까

[컴퓨터 시스템] 16. 운영체제는 프로세스와 가상 메모리를 어떻게 관리할까 지금까지는 프로그램 내부 구조와 하드웨어 쪽 흐름을 많이 봤다면, 이제는 그 프로그램이 실제 실행 환경 안에서 어떤 관리 대상이 되는지 봐야 합니다. 운영체제는 바로 그 실행 환경을 조율하는 핵심 관리층입니다.이번 글은 프로세스와 가상 메모리를 묶어, 운영체제가 왜 단순한 도구 모음이 아니라 실행 전체를 관리하는 시스템인지 설명합니다. 먼저 짚고 갈 용어 process: 실행 중인 프로그램 단위virtual memory: 각 프로세스가 자기만의 연속된 주소 공간을 가진 것처럼 보이게 하는 구조address space: 프로세스가 사용하는 메모리 주소의 논리적 범위 ..

컴퓨터시스템 기초 15. 코드 최적화는 왜 측정과 locality가 먼저일까

[컴퓨터 시스템] 15. 코드 최적화는 왜 측정과 locality가 먼저일까 14편에서 locality가 성능을 바꾼다는 감각을 잡았다면, 이제 최적화를 '코드를 영리하게 바꾸는 요령'이 아니라 '무엇을 측정하고 무엇을 바꾸는가'의 문제로 봐야 합니다.이번 글은 최적화를 감각적 마이크로 튜닝이 아니라, 병목 파악, 데이터 접근, 실험 기반 비교라는 흐름으로 정리합니다. 먼저 짚고 갈 용어 benchmark: 코드 성능을 실제로 재보는 측정bottleneck: 전체 성능을 가장 크게 제한하는 지점locality-aware optimization: 데이터 접근 구조를 개선하는 최적화 이번 글에서 다루는 것 왜 최적화 ..

컴퓨터시스템 기초 14. 메모리 계층은 왜 프로그램 속도를 바꿀까

[컴퓨터 시스템] 14. 메모리 계층은 왜 프로그램 속도를 바꿀까 13편까지가 값과 명령이 어떻게 표현되고 실행되는지에 가까웠다면, 이제는 같은 코드라도 왜 어떤 경우는 빠르고 어떤 경우는 느린지로 시선을 옮겨야 합니다. 그 중심에는 메모리 계층과 cache가 있습니다.이번 글은 저장장치, RAM, cache, register를 속도 계층으로 보고, locality와 cache line이 왜 성능 이야기의 핵심 단어인지 정리합니다. 먼저 짚고 갈 용어 memory hierarchy: 속도와 용량이 다른 저장 계층이 층을 이루는 구조cache line: cache가 한 번에 가져오는 연속 데이터 묶음locality: 최근 값이나 가까운 주소를 반복해 쓰는 경향 ..

컴퓨터시스템 기초 13. x86-64와 ARM64는 무엇이 같고 다를까

[컴퓨터 시스템] 13. x86-64와 ARM64는 무엇이 같고 다를까 어셈블리를 보다 보면 ISA마다 문법과 레지스터 이름이 달라 보여서 완전히 다른 세계처럼 느껴질 수 있습니다. 하지만 장기적으로 더 중요한 것은 차이만이 아니라 공통 구조를 읽는 능력입니다.이번 글에서는 x86-64와 ARM64를 완전히 따로 외우지 않고, 공통 질문과 눈에 띄는 차이를 나눠 보는 방식으로 정리합니다. 먼저 짚고 갈 용어 ISA: 명령 집합 구조. CPU가 어떤 명령과 규칙을 제공하는지 정한 설계x86-64: 널리 쓰이는 데스크톱/서버 계열 ISAARM64: 모바일과 서버 등에서 널리 쓰이는 또 다른 대표 ISA 이번 글에서 다루는 것 ..

컴퓨터시스템 기초 12. 배열과 구조체는 어셈블리에서 왜 주소 계산이 될까

[컴퓨터 시스템] 12. 배열과 구조체는 어셈블리에서 왜 주소 계산이 될까 고수준 언어에서는 `arr[i]`나 `s.field`가 자연스러운 문법처럼 보입니다. 하지만 저수준으로 내려오면 결국 둘 다 '기준 주소에서 얼마나 떨어진 위치를 읽고 쓰는가'라는 주소 계산 문제로 보이기 시작합니다.이번 글은 배열, 포인터, 구조체를 다시 한 번 어셈블리 관점으로 묶어 보면서, 왜 메모리 배치 감각이 중요했는지 연결합니다. 먼저 짚고 갈 용어 base address: 어떤 데이터 묶음이 시작되는 기준 주소offset: 기준 주소에서 얼마나 떨어져 있는지 나타내는 값layout: 메모리 안에 데이터가 배치되는 구조 이번 글에서 다루는 것..

컴퓨터시스템 기초 11. 레지스터와 스택 프레임은 함수 호출을 어떻게 드러낼까

[컴퓨터 시스템] 11. 레지스터와 스택 프레임은 함수 호출을 어떻게 드러낼까 10편에서 어셈블리를 번역본처럼 읽는 감각을 잡았다면, 이제 함수 호출이 실제로 어디에 흔적을 남기는지 볼 차례입니다. 함수는 고수준에서는 깔끔한 추상화지만, 저수준에서는 인자 전달, 반환 주소 저장, 지역 변수 공간 확보 같은 구체적 작업으로 드러납니다.이번 글은 함수 호출을 레지스터, 스택, 스택 프레임이라는 세 단어로 묶어 이해하는 데 초점을 둡니다. 먼저 짚고 갈 용어 stack frame: 한 번의 함수 호출을 위해 스택에 잡히는 작업 구역return address: 함수가 끝난 뒤 돌아갈 명령 위치calling convention: 인자 전달과 반환을 어떤 규칙으로 할지 ..

컴퓨터시스템 기초 10. 어셈블리는 왜 C와 하드웨어 사이의 번역본일까

[컴퓨터 시스템] 10. 어셈블리는 왜 C와 하드웨어 사이의 번역본일까 9편에서 CPU가 명령을 단계적으로 처리한다는 감각을 잡았다면, 이제 그 명령이 어떤 모습으로 보이는지 읽을 차례입니다. 어셈블리는 난해한 암호문처럼 느껴지지만, 사실은 C가 CPU 가까운 지시로 바뀐 결과를 비교적 사람 친화적으로 적어 놓은 형태에 가깝습니다.이번 글에서는 어셈블리를 독립 언어처럼 배우기보다, C 코드가 어떤 식으로 더 낮은 층위의 명령으로 번역되는지 보는 관점으로 정리합니다. 먼저 짚고 갈 용어 ISA: CPU가 이해할 수 있는 명령 집합의 규칙mnemonic: 기계 명령을 사람이 읽기 쉽게 적은 이름operand: 명령이 다루는 대상 값이나 위치 ..