
대학교에서 수학을 전공하며 앞으로 무엇을 해야할지, 내가 무엇을 좋아하는지 모른 채 대학생활을 보내고 있었다. 선배님들은 컴퓨터와 경제/경영 두 가지를 대부분 다중전공하였고 나또한 무엇인가 해야할 것 같았다. 고등학교 시절 경제수업시간이 나에게는 맞지 않는다는 사실을

파일은 텍스트 파일과 이진 파일로 나뉘며 모두 0과1로 저장이 된다. 그럼 운영체제 입장에서는 어떻게 판단할까?운영체제는 파일의 확장자와 파일 시그니처(매직 넘버), 두 가지 단서를 통해 텍스트 파일과 이진 파일을 판단하고 구분합니다. 컴퓨터 자체는 파일을 열기 전까지

지난 팀원들간 코어 시간을 보내며 궁금했던 점을 정리해보았다.스택 가드(Stack Guard)는 스택 카나리(Stack Canary)라는 기술을 이용해 버퍼 오버플로우 공격을 방어하는 대표적인 보호 기법입니다. '스택 가드'는 이 기술의 초기 구현체 이름이었고, 지금

어제 위경련이 와서 쉬다가 오늘 어제 남아있던 Z, N-queens, 외판원 문제 등 재귀와 관련된 문제들을 풀었다. 오랜만에 재귀를 풀려니 감도 다 잃었고 dfs를 푸는데 막막함이 느껴지기도 했다... 알고리즘을 도대체 얼마나 안푼거냐,,! 현실 직시하고 화이팅해야겠

정답보고 풀었던 문제들을 다시 한 번 풀어보고 정렬(삽입, 선택, 버블, 셸)을 다시 구현해보았다.팀원들과 코어타임을 가지며 다음과 같은 궁금증이 생겼다.최소 설치 용량 (저장 공간)게임의 최소 설치 용량은 게임을 구성하는 모든 파일을 하드 드라이브(HDD)나 SSD

내용은 작성할 수 없지만 기본 내용보다는 이 내용을 기반으로 깊이 생각해봤는지에 대한 문제들이 나왔다. 코어시간에 팀원들과 이야기 했던 내용들도 나와서 나름? 깊이 있게 작성할 수 있었다.(코치님 눈에는 귀엽게 보이지 않을까싶다..ㅎ)1주차 알고리즘은 진작에 다 풀었고

삼성 알고리즘 기출문제들을 몇 개 풀어보았다. 이전에 풀었을 때는 손도 못댔던 문제들을 이번엔 혼자의 힘으로 모두 풀었다!! 가끔 느끼는 일인데 과거에 몰랐던 것도 쿨하게 넘어갔다가 다시 돌아올 때 급격히 이해가 되는 경우가 있다. 이럴때마다 성장했다는 느낌이 너무 좋

총 3문제가 백준에서 출제되었다. 브론즈 1문제는 우리반 사람들 대부분 풀었던 문제였고 문제 지시대로하면 해결할 수 있었다, 실버 2문제는 완전탐색 문제가 나왔다. 현재 나는 GOLD 3(물골드)인데 그럼에도 평소에 완탐적 사고로 문제를 많이 풀어봤던 사람이라면 쉽게

모든 컴퓨터는 포인터 데이터의 기본 크기를 나타내는 워드 크기(word size)를 가집니다. 워드 크기가 결정하는 가장 중요한 시스템 매개변수는 가상 주소 공간의 최대 크기입니다.w-비트 워드 크기: 가상 주소는 0부터 $2^w−1$까지의 범위를 가지며, 프로그램은

이 섹션에서는 비트를 사용하여 정수를 인코딩하는 두 가지 방법을 설명합니다. 하나는 음수가 아닌 수(0과 양수)만 표현하는 방식이고, 다른 하나는 음수, 0, 양수를 모두 표현하는 방식입니다.C언어는 정수의 유한한 범위를 표현하는 다양한 정수형 데이터 타입을 지원합니다

리스트는 크게 두가지로 구현할 수 있다.1\. 배열2\. Node, Pointer배열로 구현했을 때의 장점 및 단점 시간복잡도를 계산해보자.기존에 있던 원소들을 뒤로 이동시켜야 하기 때문에 최악의 경우 O(N) 시간복잡도를 갖게된다.그러나 마지막 원소에 넣게 된다면 현

10문제 클리어하며 골드 2 달성.. 답은 최대한 보지 않으려고 노력했고 답을 보더라도 문제 이해를 확실히 하고 답지를 보지 않고 다시 구현할 수 있도록 했다. 며칠 전 타 대학 교수님께서 알고리즘 강의를 해주셨는데 재귀를 주제로 강의를 해주셨다. 듣기 전에는 진짜 기

많은 초보 프로그래머들은 양수 두 개를 더했는데 음수가 나오거나, x < y와 x - y < 0의 결과가 다른 것을 보고 놀라곤 합니다. 이는 컴퓨터 연산이 유한한 비트 내에서 이루어지기 때문에 발생하는 현상입니다. 컴퓨터 연산의 미묘한 특징을 이해하면 더

부동소수점 표현법은 $V=x×2^y$ 형태를 가지는 유리수를 인코딩하는 방식입니다. 이는 매우 큰 수, 0에 매우 가까운 수, 그리고 더 일반적으로는 실수 연산의 근사치를 다루는 데 매우 유용합니다.1980년대까지 모든 컴퓨터 제조사는 각자 자신만의 부동소수점 표현 방

컴퓨터 시스템은 구현의 세부 사항을 단순한 추상 모델로 숨기는 여러 형태의 추상화를 사용합니다. 기계 수준 프로그래밍에서는 다음 두 가지 추상화가 특히 중요합니다.명령어 집합 구조 (Instruction Set Architecture, ISA): 프로세서의 상태, 명령

x86-64의 주요 정수 및 논리 연산 명령어들은 대부분 다양한 크기의 피연산자를 처리할 수 있는 명령어 클래스(instruction classes)로 제공됩니다.예를 들어, add 명령어 클래스는 데이터 크기에 따라 1바이트를 더하는 addb, 2바이트를 더하는 ad

프로시저(Procedure)는 소프트웨어의 핵심적인 추상화 개념입니다. 특정 기능을 수행하는 코드를 지정된 인자(argument)와 선택적인 반환 값(return value)과 함께 묶어주는 방법을 제공하며, 프로그램의 여러 다른 지점에서 호출될 수 있습니다. (C언어

C언어는 서로 다른 타입의 데이터들을 묶어 새로운 자료형을 만드는 두 가지 메커니즘을 제공합니다.여러 개의 서로 다른 데이터를 하나의 단위로 '모아놓는(aggregate)' 방식입니다. 구조체의 각 멤버는 독립된 메모리 공간을 차지하며, 모든 멤버가 동시에 값을 가질

지금까지 프로그램의 제어 측면과 데이터 구조 구현을 각각 따로 살펴보았습니다. 이 섹션에서는 데이터와 제어가 서로 어떻게 상호작용하는지 알아보겠습니다.이 섹션에서 다룰 내용:포인터 심층 분석: C언어의 가장 중요한 개념 중 하나이지만 많은 프로그래머들이 얕게만 이해하고

trie tree는 여기를 참고!!B tree는 여기를 참고!!

다익스트라, DFS, BFS, 위상정렬, 최소 스패닝 트리, 순회 방법 등 알고리즘 약 20문제 정도 복습

어떤 문제가 나오는지는 말하지 못하지만 과제로 내준 문제들 모두 확실히 알고 있다면 무리 없이 해낼 수 있는 수준이다. 필자는 골드 2인데 3문제 50분 정도 걸렸던 것 같다.경우의 수를 쪼개서 완전탐색으로 먼저 생각하고 top-down DP 및 bottom-up DP

경기대학교 배상원 교수님께서 지난 재귀 강의에 이어서 DP 강의를 해주셨다. 지난 재귀 강의가 너무너무 좋아서 이번에도 좋은 기대하며 강의를 들었다. 역시나 오늘도 너무 좋은 강의였다.분할 정복부터 시작하여 어떻게 Reduction을 할 지, 분할 해서 결과값을 얻어왔

오늘 9기의 나만무가 끝이났다. 발표를 들었는데 모든 팀들이 깔끔하게 프로젝트를 잘 진행한 것 같다. 짧은 시간이었을텐데 기대보다 더 많은 것들을 구현한 팀, 어떻게 만든건지도 모르겠는 팀도 있었다. AI를 이용한 취업 도움 올인원 웹 사이트를 만든 팀은 짧은 시간내에

DP를 풀기 위한 스탭들을 정리해보려 한다.우리가 문제를 풀 때는 DP인걸 모를 수 밖에 없다.자연스러운 사고과정은 완전 탐색으로 접근해보는 것이다. 완전 탐색으로 문제를 풀다가 이거.. 계산할게 너무 많은데..? 라는 생각이 들면 DP를 한 번 떠올려보자. DP로 풀

문제에서 원한는대로 dp 테이블을 정의해보자.dpi = i번째 돌에 도착했을 때 필요한 최소 점프 횟수이 점화식을 가지고 문제를 풀다보면 현재 속도에 대한 정보가 없기 때문에 풀리지 않는다는 것을 알 수 있다. 따라서 2차원 테이블을 만들고 다음과 같이 정의하였다.dp

성민 코치님께 이력서 첨삭을 받았다. 어떤 첨삭을 받았고 어떻게 수정할 지 고민해보려 글을 작성해보려고 한다.자기소개서든 이력서든 앞에 1,2 문장만 본다. 이목을 이끌만한 내용을 작성하자.1번 내용에 추가적으로 구체화할 수 있는 내용을 작성하자. 예를 들어 숫자로 표

실3 ~ 골5 난이도의 DP 문제를 14문제 풀었다. 이전보다는 감이 많이 좋아졌다. 감이 좋아졌다는 말은 점화식을 찾는데 비슷한 패턴들이 보이기 시작했다는 말이다.이번주는 오늘이 마지막 DP 알고리즘이겠지만 DP 기본 문제들에 대한 자신감을 많이 갖게 되었다. 앞으로

6장. 메모리 계층 구조 지금까지 우리는 컴퓨터를 '명령어를 실행하는 CPU'와 '데이터를 저장하는 메모리'라는 단순한 모델로 다루어 왔습니다. 하지만 이 모델은 현대 시스템이 실제로 동작하는 방식을 반영하지 못합니다. 1. 메모리 시스템의 실체: 계층 구조 실제

디스크는 엄청난 양의 데이터를 저장하는 핵심적인 저장 장치입니다. RAM 기반 메모리가 수백~수천 메가바이트(MB)인 것에 비해, 디스크는 수백~수천 기가바이트(GB) 또는 그 이상의 데이터를 저장할 수 있습니다.하지만 디스크에서 정보를 읽는 데는 밀리초(ms) 단위의

정글에서 스켈레톤 코드가 주어지고 필요한 부분만 구현하였다.

초창기 컴퓨터 시스템의 메모리 계층 구조는 CPU 레지스터, 메인 메모리, 디스크 저장 장치라는 단 3개의 레벨로만 구성되었습니다. 하지만 기술이 발전하면서 CPU의 처리 속도와 메인 메모리(DRAM)의 접근 속도 사이의 성능 격차(performance gap)가 점점

6.2절에서 우리는 지역성(locality)의 개념을 소개하고, 무엇이 좋은 지역성을 구성하는지에 대해 정성적으로 이야기했습니다. 이제 캐시 메모리가 어떻게 동작하는지 이해했으므로, 더 정확하게 설명할 수 있습니다.더 좋은 지역성을 가진 프로그램은 더 낮은 미스율(mi

이 섹션에서는 실제 머신에서 실행되는 프로그램의 성능에 캐시가 미치는 영향을 연구함으로써 메모리 계층 구조에 대한 논의를 마무리합니다.프로그램이 메모리 시스템에서 데이터를 읽는 속도를 읽기 처리량(read throughput) 또는 읽기 대역폭(read bandwidt

링킹(Linking)은 다양한 코드와 데이터 조각들을 수집하고 결합하여, 메모리에 로드(복사)하고 실행할 수 있는 단일 파일로 만드는 과정입니다.링킹은 소스 코드가 기계어 코드로 변환되는 컴파일 시간, 프로그램이 로더에 의해 메모리에 로드되어 실행되는 로드 시간, 심지

어셈블러가 목적 모듈을 생성할 때, 코드와 데이터가 최종적으로 메모리 어느 곳에 저장될지 알지 못합니다. 또한, 다른 파일에 정의된 함수나 전역 변수의 주소도 알 수 없습니다.따라서 어셈블러는 최종 위치를 알 수 없는 대상을 참조할 때마다 재배치 항목(relocatio

ECF는 프로그램의 내부 변수로는 알 수 없는 시스템 상태의 변화에 대응하기 위해 발생하는 제어 흐름의 급격한 변화를 의미합니다.프로세서에 전원이 들어온 순간부터 꺼질 때까지, 프로그램 카운터(Program Counter)는 명령어 주소의 연속인 $a0, a_1, ..

삭제까지는 구현했고 삭제 후 rebalacing을 하는 중이다! 내일까지 끝낼 수 있도록 하자!@!!@306호 분들과 농구시합을 하였다! 3대2로 처참히 졌지만,, 다음번엔 꼭 이기리라..!

현대 시스템은 메인 메모리를 더 효율적이고 안전하게 관리하기 위해 가상 메모리(VM)라는 추상화 개념을 제공합니다. 가상 메모리는 하드웨어와 커널 소프트웨어의 상호작용을 통해 각 프로세스에게 크고, 균일하며, 독립적인 전용 주소 공간을 제공하는 메커니즘입니다.메인 메모

여기서 MAP(A)는 다음과 같습니다.가상 주소 $A$의 데이터가 PAS의 물리 주소 $A'$에 존재한다면: $A'$가상 주소 $A$의 데이터가 PAS의 물리 메모리에 존재하지 않는다면: $\\emptyset$ (공집합) (CSAPP 그림 9.12 참조) MMU(메모

mmap이나 munmap 같은 저수준 함수를 직접 사용하는 것도 가능하지만, C 프로그래머들은 런타임에 추가적인 가상 메모리를 얻기 위해 동적 메모리 할당기(Dynamic Memory Allocator)를 사용하는 것이 더 편리하고 이식성이 높다고 생각합니다.할당기는

예외(Exception)는 운영체제 커널이 프로세스(process)라는 개념을 제공할 수 있게 하는 기본적인 구성 요소입니다. 프로세스는 컴퓨터 과학에서 가장 심오하고 성공적인 아이디어 중 하나입니다.현대 시스템에서 프로그램을 실행할 때, 우리는 마치 우리 프로그램이

malloc lab 프로젝트를 본격적으로 들어가기 전 9.9장이 CSAPP에서 가장 중요하다. 그에 따라 팀원들과 함께 9장을 빠르게 복습하고 malloc 프로젝트를 진행하기로 하였다.확실히 저번 주에는 정리가 안되는 느낌이었는데 두 번째 보니 정리가 되는 느낌이 든다

Implicit 메모리 할당기에 대해 알아봅시다!명시적으로 자료구조를 선언하지 않기 때문에 Implicit(묵시적) 할당기라고 부릅니다.alloc + free 블록을 사이즈를 포함하는 헤더 정보를 이용하여 뛰어다니는 매커니즘으로 동작합니다.이런식으로 말이죠!CSAPP에

운영체제는 "현재 어떤 공유 객체(파일)의 어느 부분이 어떤 물리 메모리 프레임에 올라와 있는지"를 커널 내의 전역적인 자료구조를 통해 관리합니다. 이 정보가 없으면 공유 매핑 자체가 불가능합니다.이 관리의 핵심 주체는 VFS(Virtual File System) 계층

Implicit - next_fit Implicit - best_fit Explicit - LIFO - first_fit Explicit - LIFO - next_fit 
C 언어는 비지역 점프(nonlocal jump)라는 사용자 수준의 예외적 제어 흐름(ECF)을 제공합니다. 이는 일반적인 함수 호출/반환 순서를 무시하고, 한 함수에서 스택 상의 다른 (현재 실행 중인) 함수로 제어권을 직접 이전시키는 기능입니다. 이 기능은 setj

입출력(I/O)은 주 메모리와 디스크, 터미널, 네트워크 같은 외부 장치(external devices) 간에 데이터를 복사하는 과정입니다.입력(Input): I/O 장치 $\\rightarrow$ 주 메모리출력(Output): 주 메모리 $\\rightarrow$ I

웹 브라우징, 이메일 전송, 온라인 게임 등 네트워크 애플리케이션은 어디에나 있습니다. 흥미롭게도, 모든 네트워크 애플리케이션은 동일한 기본 프로그래밍 모델, 유사한 전체 논리 구조, 그리고 동일한 프로그래밍 인터페이스를 기반으로 합니다.네트워크 애플리케이션은 이미 시

웹 브라우징, 이메일 전송, 온라인 게임 등 네트워크 애플리케이션은 어디에나 있습니다. 흥미롭게도, 모든 네트워크 애플리케이션은 동일한 기본 프로그래밍 모델, 유사한 전체 논리 구조, 그리고 동일한 프로그래밍 인터페이스를 기반으로 합니다.네트워크 애플리케이션은 이미 시

8장에서 배운 것처럼, 논리적 제어 흐름(logical control flow)이 시간상으로 겹치면 동시성(concurrent)을 갖는다고 합니다. 동시성(concurrency)이라고 알려진 이 일반적인 현상은 컴퓨터 시스템의 다양한 레벨에서 나타납니다.예시: 하드웨어

공유 변수는 편리하지만, 동기화 오류(synchronization errors)라는 고약한 문제를 일으킬 가능성을 도입합니다.Figure 12.16의 badcnt.c 프로그램을 살펴봅시다. 이 프로그램은 두 개의 스레드를 생성하며, 각 스레드는 cnt라는 전역 공유 카

공유 변수는 편리하지만, 동기화 오류(synchronization errors)라는 고약한 문제를 일으킬 가능성을 도입합니다.Figure 12.16의 badcnt.c 프로그램을 살펴봅시다. 이 프로그램은 두 개의 스레드를 생성하며, 각 스레드는 cnt라는 전역 공유 카

Proxy_basic Proxy Concurrency Proxy cache Proxy thread pool

성능 테스트를 위해 간편하게 사용할 수 있는 ApacheBench를 사용하였습니다.개인적인 생각으로 성능 측정 도구는 아무거나 사용해도 무방하며 out을 해석하는 능력이 더욱 중요합니다.다음과 같이 측정을 해보았습니다.결과를 보니 쓰레드 풀을 사용할 때, 워커 쓰레드

Alarm Clock은 가이드에 굉장히 친절하게 나와있다. 그대로만 따라하면 90퍼는 완성!테스트 케이스를 참고해서 예외 상황 처리해주면 된다.가이드에 정독하라는 파일들은 주석 꼼꼼히 읽어야 실수 안하고 테스트 통과할 수 있습니다!쓰레드 struct에 int64_t w