파일 디스크립터는 파일이 아니라 열린 파일 설명을 가리킨다
같은 파일을 두 번 열고, 그중 하나를 dup()으로 복제하면 파일 디스크립터가 셋이 된다. 셋 다 같은 파일을 가리킨다. 그런데 하나로 5바이트를 읽고 나서 셋으로 한 바이트씩 읽으면 이렇게 나온다 fd 3과 fd 5는 이어서 읽고 fd 4만 처음부터 읽는다. 셋…
같은 파일을 두 번 열고, 그중 하나를 dup()으로 복제하면 파일 디스크립터가 셋이 된다. 셋 다 같은 파일을 가리킨다. 그런데 하나로 5바이트를 읽고 나서 셋으로 한 바이트씩 읽으면 이렇게 나온다 fd 3과 fd 5는 이어서 읽고 fd 4만 처음부터 읽는다. 셋…
메모리가 모자라면 성능이 조금씩 나빠질 것 같다. 실제로는 그렇지 않다. 물리 메모리를 512MiB로 묶어 두고 프로그램이 실제로 쓰는 메모리만 늘려 가며 같은 작업을 세 바퀴씩 돌렸다 작업 집합이 67% 늘었는데 걸린 시간은 1,122배가 됐다. 그 사이에 성능이 완만하게 떨어지는 구간은…
프로그램이 &변수로 얻는 주소는 실제 메모리 칩 위의 자리가 아니다. 아래는 같은 프로세스 안에서 코드·전역 변수·힙·스택의 주소를 뽑고, 각각이 실제로 어느 물리 프레임에 올라가 있는지 커널에 물어본 결과다 왼쪽 가상 주소는 코드에서 힙, 스택으로 질서 있게 늘어서 있다. 오른쪽 물리…
스레드 네 개가 같은 변수를 각각 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년까지 클라이언트와 데이터센터 플랫폼에서 레거시…
금요일 낮 12시쯤에 카톡이 왔다. 기 개발사로부터 파일을 인계받아 이관한 고객사 사이트 두 곳에서 블로그·고객후기 등 전부 사라졌다는 신고였다. 화면은 그대로라고 했다 (혹시) DB가 날아간 걸 먼저 의심했다. 그게 아니었다. 원인은 25일 전에 만료된 SSL 인증서였고 데이터는 한 건도 유실되지…