
다음 명령어의 주소를 저장하는 레지스터CPU가 다음으로 실행할 명령어의 메모리 주소를 저장 하나의 명령어 실행 후, 자동으로 다음 명령어의 주소로 업데이트 분기(branch), 점프(jump), 함수 호출(call) 시에도 업데이트되어 프로그램 흐름 제어를 담당
CPU와 메모리 사이의 속도 차이를 줄이기 위해 존재하는 고속 메모리CPU는 매우 빠르지만 메모리는 상대적으로 느림이 속도 격차를 줄이기 위해 캐시 메모리를 사용프로그램은 특정 메모리 영역을 반복적으로 접근하는 성질이 있음→ 이를 이용해 캐시가 데이터를 미리 불러옴 (
커널은 운영체제의 핵심 구성 요소로, CPU, 메모리, 저장장치, 입출력 장치 등 하드웨어 자원을 관리한다.사용자 프로그램이 시스템 자원을 안전하고 효율적으로 사용할 수 있도록 중재하는 기능을 수행한다.시스템 콜은 사용자 모드의 프로그램이 커널 모드의 자원과 기능을 요
네트워크 통신은 시스템 간 메모리를 직접 공유하지 못하므로,데이터를 '복사'해서 전송하는 방식으로 이루어진다.🔎 이때 "hello from client"라는 문자열은 컴퓨터 A에서 복사되어 네트워크를 통해 B로 전달됨.네트워크 통신은 데이터를 복사해서 전송하는 방식으
TCP/IP는 인터넷에서 사용하는 핵심 통신 프로토콜들의 집합이다.우리가 웹서핑을 하거나, 메시지를 주고받고, 파일을 전송할 수 있는 건 모두 TCP/IP 덕분이다.TCP: Transmission Control Protocol IP: Internet Protocol
네트워크를 통해 전송하던 데이터 조각(패킷)이 중간에 유실되는 현상보내는 쪽에서는 데이터를 전송했지만, 받는 쪽에서는 일부 패킷이 도착하지 않음네트워크에서 데이터를 보낼 때, 작은 조각 단위로 쪼갠 데이터 덩어리예: "hello world" → hello, , wor
시스템의 일부만 개선했을 때, 전체 성능이 얼마나 향상될 수 있는지를 계산해주는 법칙→ 즉, “병렬화 해도 전체 성능은 거기까지밖에 못 올라간다”는 걸 보여주는 현실적인 한계!S = 1 / (1 - P) + (P / N)전체 작업의 80%가 병렬화 가능하고, CPU 4
🔑 P (병렬화 가능한 비율)을 키운다는 건?→ 전체 작업 중 더 많은 부분을 병렬화할 수 있도록 프로그램을 구조화하는 것각 작업이 다른 작업에 의존하지 않도록 분리예: 이미지 필터링, 배열 처리, 파일 분석 등에서 각 조각을 독립적으로 처리같은 작업을 여러 데이터에
이 글에서는✅ "깊다" = "하드웨어와 가깝다"✅ "얕다" = "소프트웨어에 가깝다"로 정의하고 병렬성의 세 가지 수준을 비교합니다.✅ 가장 깊은 병렬성 CPU 내부 회로가 명령어 간 의존성을 분석해서 자동 병렬 실행 예: 파이프라이닝, 분기 예측, 명령어 재정렬
SIMD (Single Instruction, Multiple Data) 하드웨어란,하나의 명령어로 여러 데이터를 동시에 처리할 수 있는 하드웨어 구조를 말해.즉, 같은 연산을 여러 데이터에 한꺼번에 적용할 수 있도록 설계된 처리 장치야.하나의 CPU 명령어가 "벡터
쓰레드 수준의 동시성(TLC)이란,여러 개의 쓰레드가 논리적으로 동시에 실행되는 것처럼 보이는 구조를 의미한다.즉, 실제로는 동시에 실행되지 않더라도,빠르게 번갈아가며 실행되기 때문에 사용자 입장에선 “동시에 실행되는 것처럼” 보임!❌ 꼭 동시에 실행되는 건 아님 (싱
하나의 프로세스 안에서 여러 개의 스레드가 동시에 실행되도록 하는 프로그래밍 기법각 스레드는 독립적인 흐름(control flow)을 가지고, 메모리 공간은 공유함 (같은 주소 공간)웹 서버에서 요청 100개를 동시에 처리할 때,각 요청을 개별 스레드로 분리해서 빠르
Control Flow(제어 흐름)란프로그램 내의 명령어들이 실행되는 순서를 정의하는 흐름을 의미한다.즉, 컴퓨터가1번 명령어 → 2번 명령어 → 조건에 따라 5번 명령어...이런 식으로 실행 순서를 어떻게 결정하느냐에 대한 이야기야.프로그램이 단순히 위에서 아래로만
멀티스레딩이란 하나의 프로세스 안에서 여러 개의 스레드가 동시에 실행되는 것이며,이때 스레드들은 하나의 공통 메모리 공간을 공유한다.🧠 즉, 공통 코드/데이터/힙은 공유, 스택은 개별적으로 가짐모든 스레드는 같은 힙에 접근 가능 (ex: 공통 리스트 사용)각 스레드는
복잡한 시스템을 더 단순하고 이해하기 쉬운 방식으로 표현하는 것즉, 세부 사항을 숨기고, 본질만 보여주는 개념적 도구컴퓨터 시스템은 수많은 구성 요소(CPU, 메모리, 디스크, 네트워크 등)로 이뤄져 있음 개발자가 모든 세부사항을 다 이해하고 일할 수는 없음!추상화
복잡한 실제 구조를 단순화해서, 사용자가 쉽게 다룰 수 있도록 만든 개념적인 계층컴퓨터 시스템은 우리가 직접 회로, 물리 메모리, 디스크 헤드를 다루지 않아도파일, 프로세스, 메모리 공간, 심지어 컴퓨터 자체를 "가짜로" 다룰 수 있게 해줌📁 파일: 네트워크 소켓도,
우리가 세상을 숫자로 표현하는 방식. 그 방식에 따라 숫자의 해석이 달라진다.우리가 일상적으로 쓰는 숫자는 10진수(Decimal). 손가락 열 개에서 유래해 0~9까지 10개의 숫자를 쓴다. 하지만 컴퓨터는 전혀 다른 방식으로 숫자를 표현한다. 바로 2진수(Binar
우리가 프로그램을 디버깅하거나, 메모리 주소를 분석하거나, 어셈블리어를 해석할 때 자주 마주치는 건 바로 16진수(hex)다. 그런데 그 값의 의미는 2진수로 봐야 정확히 해석할 수 있다.✅ 16진수는 사람이 보기 편한 '표기법'일 뿐, 컴퓨터는 2진수로 처리한다.→
우리가 작성하는 코드가 실제로는 어떻게 저장되고 실행되는가컴퓨터 시스템 전체가 어떻게 0과 1로 구성되는지CS:APP 1장에서 말하는 4대 추상화와 진법의 연결변수 하나 → 메모리 상에 비트로 저장됨연산 하나 → ALU가 비트 계산조건문 → 플래그 레지스터의 특정 비트

🧑💻 네트워크 프로그래밍의 첫걸음, 에코 서버를 직접 만들어보며socket(), connect(), read(), write() 등 기초를 몸에 익혀보자webproxy-lab/echo/ 폴더 안에서 에코 서버 코드를 작성합니다.폴더명이나 경로는 개인마다 다를 수
"TINY 웹서버가 CGI 자식 프로세스를 기다릴 때, Wait() 대신 SIGCHLD 시그널 핸들러를 써서 좀비 프로세스를 정리해보자."TINY는 CGI 프로그램(동적 컨텐츠)을 실행할 때 다음과 같이 동작한다 :이 방식은 간단하지만 단점이 있다 :자식 프로세스가 종
11.9번 문제는 다음과 같다:TINY를 수정해서 정적 컨텐트를 처리할 때 요청한 파일을 mmap과 rio_readn대신에malloc, rio_readn, rio_writen을 사용해서 연결 식별자에게 복사하도록 하시오.기존의 serve_static() 함수는 mmap
TINY 웹서버를 확장하여 HTTP의 HEAD 메서드를 지원하라.HEAD는 GET과 동일하게 동작하지만, 본문(body)을 클라이언트에게 전송하지 않는다.정적 콘텐츠와 동적 콘텐츠 모두 적용되어야 한다.작업이 끝나면 telnet 명령어로 테스트하라.본문 전송을 is_h