이 포스트를 어디에 쓸지 고민을 굉장히 많이 하였습니다. OS에 쓸지, 어셈블리 카데고리를 따로 만들어서 써야 할 지, 아니면 C언어에 쓸지. 그런데, 모 사이트에서 가장 많이 질문받은 것 중 하나가 OS의 thread (혹은 Linux의 fork)를 공부하고 있는데 왜 실행 흐름이 이렇게 되나요? 에 대한 질문이 많았습니다. 그렇기 때문에, 일단 OS 카데고리에 작성하도록 하겠습니다. 먼저, pc는 프로그램 카운터입니다. 그러면 이 값을 저장하는 것은, pc register일 거에요. 그러면 뭘 저장할까요? 실행할 기계어 코드의 주소를 저장할 거에요. 아. 벌써 모르는 용어가 3개 나온 거 같아요. 쉽게 설명해 드리겠습니다. 일단, 우리는 기계어를 명령이라고 합시다. 밥 먹어라. 혹은 설거지 해라와 같..
OS 검색 결과
실행 중인 프로세스의 pid와, 부모 프로세스의 pid를 얻어올 수 있는 방법이 없을까요? 각각 getpid 함수와 getppid 함수를 쓰시면 됩니다. 두 개 함수의 원형은 아래와 같습니다. 이제 예제 프로그램을 2개 보도록 하겠습니다. 먼저, 1번째 프로그램입니다. fork 함수로 자식 프로세스를 생성합니다. 그리고, pid가 0이면, 앞에 C를 출력하고, 그것의 프로세스 번호와, 부모의 번호를 출력합니다. 그렇지 않으면, 앞에 P를 출력하고, 프로세스 번호와, 부모 번호를 출력합니다. fork 함수의 리턴값이 0이라면 자식이고, 현재 실행중인 pid 값이면 부모이니, 어떻게 실행이 될 지는 대략 예측이 가능하실 거라고 생각이 듭니다. 실행 결과를 봅시다. 그러면 3373번이, 3374번을 생성을 했..
이번 글에서는 간단하게 좀비 프로세스에 대해서 알아보도록 하겠습니다. ps 명령어 사용법도 익히실 겸 겸사겸사. 이것은, 실행이 다 끝났는데, 아직 어딘가에서는, 삭제가 되지 않은, 정보가 남아 있는 프로세스를 의미합니다. 이들을 여러개 생성해 보면서 어떤 일이 일어나는지 보도록 하겠습니다. fork.c 프로그램입니다. 이것을 보면, pid가 -1일 때, while(1) 1번째 LOOP를 빠져 나옵니다. 이 때에는 프로세스를 생성할 수 없을 때일 거고요. fork()를 호출한 경우, 자식 프로세스가 생성이 되는데요. 이 때, 부모인 경우, pid 값이 0이 리턴이 되지 않기 때문에, 계속 while Loop를 돌 겁니다. 그러다가 fork 함수가 -1을 리턴한다면, (예를 들자면, 프로세스를 생성할 수 ..
폴더나 파일이 같은지 다른지 출력하려면 어떻게 해야 할까요? 다른 내용까지 보려면 어떻게 해야 할까요? 리눅스의 diff 명령어는 그것을 위한 명령어입니다. 이런 유틸은 인터넷에도 꽤 많이 있을 정도인데요. 저 같은 경우, 백준에서 (흔히 올라오는 질문 중 하나인) 2개의 소스코드 중 하나는 맞고 하나는 틀리다고 할 경우에 어느 부분이 어떻게 다른지부터 체크하는 편입니다. 이 때 쓸 수 있습니다. 먼저 diff가 어떻게 구현되었는지에 대한 것은, 아니면 그에 대한 알고리즘들은, 나중에 살펴보기로 하고, 이번 시간에는 폴더가 어떻게 다른지, 그리고 파일이 어떻게 다른지 알아내는 방법을 알아보도록 하겠습니다. 먼저, 1과 2 디렉토리가 있습니다. tree 명령어로, 폴더 내에 어떠한 것들이 있는지 출력해 봅..
alias는 별칭이라는 뜻입니다. 예를 들어서 A라는 이름을 가진 사람을, B라고 부를 수 있습니다. 이 때, B는 A의 별칭 (별명) 이라고 많이 이야기를 합니다. 명령어도 다르게 부를 수 있는데요. 예를 들어서, ll은 'ls -l --color=auto'의 다른 이름이라고 할 수 있어요. 엄청나게 긴 것을 단 2글자로 압축을 할 수도 있어요. 이 정도만 보면 꽤 대단하고 위력적인 것임을 알 수 있습니다. alias만 쉘에 쳐 보면, 현재 별칭이 적용되어 있는 것들만 출력이 됩니다. 먼저, 명령어 A를 B라는 이름으로 다시 부르게 하도록 하기 위해 등록하는 명령어는 alias B = 'A'입니다. 예를 들어서, head 라는 명령어를 hd라는 이름으로 다시 부르게 하려면, alias hd = 'hea..
최근댓글