가상 메모리 주소 변환은 세그멘테이션이 아니라 페이징 혼자 한다
프로그램이 &변수로 얻는 주소는 실제 메모리 칩 위의 자리가 아니다. 아래는 같은 프로세스 안에서 코드·전역 변수·힙·스택의 주소를 뽑고, 각각이 실제로 어느 물리 프레임에 올라가 있는지 커널에 물어본 결과다 왼쪽 가상 주소는 코드에서 힙, 스택으로 질서 있게 늘어서 있다. 오른쪽 물리…
프로그램이 &변수로 얻는 주소는 실제 메모리 칩 위의 자리가 아니다. 아래는 같은 프로세스 안에서 코드·전역 변수·힙·스택의 주소를 뽑고, 각각이 실제로 어느 물리 프레임에 올라가 있는지 커널에 물어본 결과다 왼쪽 가상 주소는 코드에서 힙, 스택으로 질서 있게 늘어서 있다. 오른쪽 물리…
스레드 네 개가 같은 변수를 각각 100만 번씩 1 증가시키면 400만이 나와야 한다. 실제로 돌려 보면 300만이 나오고, 다시 돌리면 220만이 나온다. 같은 코드인데 실행할 때마다 답이 다르다 이 문제를 잠금으로 막는다는 것까지는 알려져 있는데, 잠금이 실제로 어디서 일어나는지는 덜…
CPU 스케줄링을 배우면 FIFO에서 시작해 SJF, 라운드 로빈을 거쳐 MLFQ에서 끝난다. 각 알고리즘이 앞 알고리즘의 단점을 하나씩 메우는 흐름이라 이야기가 깔끔하고, 마지막에 “오늘날 운영체제는 MLFQ를 쓴다”로 닫히면 정리가 된다 리눅스 CPU 스케줄러는 그 목록에 없다. 2.6.23부터 CFS(Completely Fair Scheduler)를 썼고,…
리눅스의 fork는 부모 프로세스의 메모리를 복사하지 않는다. 코드 영역도 데이터 영역도 힙도 복사하지 않고, 부모와 자식이 같은 물리 페이지를 함께 가리키게 해 둔 다음 누군가 쓰기를 시도할 때 그 페이지만 복사한다. Copy-on-Write다 그렇다면 512MiB를 쥐고 있는 프로세스를 fork하는 비용과 아무것도…
전원 버튼을 누르면 ROM에 저장된 BIOS가 실행되고, 하드웨어를 점검한 뒤 하드디스크 첫 섹터의 마스터 부트 레코드에서 부트로더를 읽어 메모리로 올린다. 나도 이 순서로 외웠고 면접에서도 이렇게 답했다. 그런데 지금 팔리는 PC에는 이 경로가 없다 Intel은 2020년까지 클라이언트와 데이터센터 플랫폼에서 레거시…
수강 신청 DTO의 두 필드에 @NotNull을 걸고, 애플리케이션 서비스에는 @Validated를 달아 두었다. 그런데 리뷰에서 나는 그 사이에 있어야 할 @Valid가 빠져 있는 것을 발견했다. 그 상태에서는 DTO에 제약을 몇 개 걸어 두어도 Bean Validation 검사가 시작되지 않는다 같은 자리에 함정이…
어떤 프로퍼티 조합이 고유하고 그 값으로 엔티티 하나를 특정할 수 있으면 자연 키 후보로 본다. 회원의 이메일이 그랬고, 강의의 강사와 제목 조합도 그랬다. 그런데 두 경우에 서로 다른 결정이 나왔다. 이메일에는 @NaturalId를 붙였고, 강사와 제목에는 유니크 제약만 걸었다. Hibernate에서 @NaturalId를…
오후 1시 16분, 스토어 등록 폼을 열어 놓고 개인정보처리방침 URL 칸에서 멈췄다. 넣을 주소가 없었다. 페이지가 아직 안 만들어진 게 아니라, 그 페이지를 담을 코드조차 없었다 우리가 나간 공모전은 제출물이 파일이 아니라 「스토어에 등록 완료된 링크」다. APK를 내는 게 아니라…
2026년 8월 23일, CI 잡이 3초 만에 빨간불이 됐다. 로그를 열었더니 실패한 스텝이 없었다. 스텝 자체가 없었다. 계정의 GitHub Actions 무료 분 소진이었다 — 2,000분을 22일에 다 써서, 잡이 실패한 게 아니라 시작을 못 한 것이었다 하루 전에 나는 같은…
입력 값 검증을 애플리케이션 서비스 메서드 안에 직접 넣으면 첫 번째 오류를 만나는 순간 예외를 던지게 된다. 입력 항목이 열 개고 그중 다섯 개가 잘못됐다면 사용자는 다섯 번 제출하고 다섯 번 오류 메시지를 본다. 두 번째 제출에서야 두 번째 오류를…