콰인은 자기 자신의 코드를 출력하는 코드이다. 즉, 실행 결과가 자신의 코드와 동일해야 한다. 생각보다 간단하지 않다. 무지성으로 아래처럼 짜면 disp('disp') 출력은 disp만 되므로, 다시 아래처럼 고쳐야 하고, disp('disp(''disp'')') 이렇게 해봤자 다시 코드가 늘어났으므로 다시 코드를 늘려야 한다. 아래는 chatGPT가 알려준 매트랩 콰인이다. quine = 'fprintf(''%s%s%s'', char(10), ''quine = '';, quine, char(10), quine);';fprintf('%s%s%s', char(10), 'quine = ', quine, char(10), quine); 그런데 틀렸다. 따옴표 2개는 따옴표 1개로 바뀌기 때문이다. 다시 물어..
15. 파일 시스템CPU, 메모리, OS의 동작원리 등을 공부하면서 느낀 것을 딱 하나 말하라면, 이렇게 말하겠다.이게 돌아간다고?!그것도 수 GHz의 속도로!?컴퓨터를 설계하는 사람들이 대단하다고는 생각하고 있었지만,그 존경심이 백 만 배만큼 더 커진 것 같다.마지막은 파일 시스템이다.파일 시스템이야 뭐 별거 있나...?그냥 폴더 있고 파일 있는게 전부 아닌가?...라고 생각하면 오산이다.15.1 파일과 디렉터리내가 생각했던 보조기억장치, 디렉터리, 파일의 구조는 아래 그림과 같았다.출처: https://wikidocs.net/223730책장이 보조기억장치이고, 책장 한 칸은 폴더, 상자는 파일이다.이 그림도 어쩌면 수정해야 할 수도 있겠다.파티션의 존재 때문인데... 조금 뒤에 설명하겠다.파일은 그 ..
14. 가상 메모리지금까지 OS가 프로세스를 어떻게 관리하는지 열심히 배웠다.핵심은 OS가 프로세스에게 자원을 어떻게 잘 배분하는가였다.그런데 프로세스는 메모리에 올라간다.프로세스를 메모리에 올리는 것도 분명히 OS가 관리해야 할 사항이다.그 과정에서 가상 메모리의 개념이 자연스럽게 등장하게 된다.14.1 연속 메모리 할당연속 메모리 할당(contiguous memory allocation)은 프로세스를 메모리에 올리는 가장 간단한 방법이다.가장 먼저 실행될 프로세스를 메모리에 올리고, 그 다음 실행될 프로세스를 바로 뒤에 올린다.다만, 인터넷을 찾아보면 연속 메모리 할당도 두 가지 방법으로 세분화된다.책에 있는 것과 같이 빈틈 없이 메모리가 채워지는 것을 variable-size allocation이라..
13. 교착 상태교착 상태는 아래 이미지 한 장으로 설명 가능하다.서로가 각자에게 필요한 것을 가지고 있다!어떡하지?13.1 교착 상태란OS, 프로세스, 자원의 관점으로 보자면 아래와 같은 상황이다.출처: https://www.geeksforgeeks.org/introduction-of-deadlock-in-operating-system/교착 상태(deadlock)가 성립하기 위한 조건은 네 가지가 있다.상호 배제: 하나의 자원은 한 번에 하나의 프로세스만 점유할 수 있다.점유와 대기: 프로세스가 자원 하나를 붙들고 다른 자원을 기다릴 수 있다.비선점: 프로세스가 다른 프로세스의 자원을 강제로 뺏을 수 없다.원형 대기: 위 그림처럼, 자원 할당 그래프가 루프를 만들 수 있다.13.2 교착 상태 해결 방법..