오늘은 sleep sort에 나왔었던, unistd.h에 있는, 리눅스 fork 함수에 대해서 알아보겠습니다. int fork(); 이것만 보면 별 거 없어요. 그냥 프로세스를 생성해주는 역할을 합니다. 그런데, 리턴 값이 2개인데요. 예를 들어서 process A에서 fork가 호출되어서 process B가 생성이 되었다고 합시다. 그러면, A의 자식은 B가, B의 부모는 A가 됩니다. 그러면, 이 때, 프로세스 B에서는 0이라는 값이, 프로세스 A에는 B의 pid 값이 리턴이 됩니다. 이제 이 함수를 호출하면 어떤 식으로 흘러가는지 예제만 보도록 하겠습니다. 먼저 global 변수와, heap, stack 변수를 하나씩 생성했습니다. 그리고 10번째 줄에서 문제의 함수를 호출하였습니다. 일단, 그러면..
OS 검색 결과
보통 stdin은 표준 입력, stdout은 표준 출력, stderr은 표준 에러를 나타내는 것들입니다. 이에 대해서는 파일에 대해서 다룰 때 이야기 하도록 하고요. 자세히 들어가면 글이 길어질 듯 하니, 간단하게 어떤 식으로만 쓰는지 알아보도록 하겠습니다. 대략적인 그림부터 보겠습니다. 이 그림만 보면, stdin, 즉 표준 입력 스트림에서 읽어오고, stdout, 표준 출력 스트림에 씁니다. 그리고 오류가 발생한 경우 stderr, 표준 에러 스트림에 씁니다. 그런데, 이것을 재지정 하는 방법이 없을까요? 이를 리다이렉션이라고 이야기 합니다. 먼저, >는, 출력 재지향을 의미합니다. 먼저 head 명령어를 이용해 봅시다. 저는 아직 리다이렉션을 하지 않았기 때문에, stdout 스트림을 쓸 것이고, ..
쓰레드를 이야기 하다 보면 병렬성과, 동시성이라는 용어가 자주 나옵니다. 이 말은 무엇을 의미할까요? 그 전에, 우리는 쓰레드의 상태를 이해할 필요가 있습니다. 오늘은 그에 대해서 간단하게 이야기 해 보도록 하겠습니다. 먼저, w[i] = new worker(); 문을 봅시다. 그러면, Thread를 상속받은 worker 객체가 생성이 됩니다. 그러면 worker-x는 생성이 되고, 아직 start()가 호출이 되지 않았어요. 이를 new 상태라고 이야기 합니다. 그 다음에 우리는 start() 메소드를 호출했습니다. t.start()를 호출하면, Thread를 상속받은 worker 클래스 내부의 run 메소드가 호출이 될 겁니다. 그러면, 실행 대기 상태가 됩니다. 즉, 스케쥴러에 의해서 선택이 될 수..
리눅스에는 심볼릭 링크와 하드 링크가 있습니다. 이것들을 설명하기 위해서는 i_node라는 친구를 알아야 하는데요. 여기에서는 그냥 실제 디스크에 저장되어 있는 내용을 가리키는 무언가라고 생각하는 게 좋을 듯 싶네요. 나중에 자세히 언급할 듯 싶습니다. 먼저 폴더 안에 1.txt랑 2.txt를 생성합니다. 1.txt에는 chogahui is my dog라는 내용이 들어가 있습니다. 그리고 2.txt에는 그가 maltize라는 내용이 들어가 있습니다. 여기까지는 어렵지 않습니다. 저는, 1.txt를 심볼릭 링크로 연결하는 일명 soft랑, 2.txt를 하드 링크로 연결하는 hard를 생성하였습니다. 이것을 a 옵션과, l, i 옵션을 붙인 ls 명령어로 봅시다. 그러면 대충 이렇게 나오는 것을 볼 수 있는..
오늘은 비슷한 것 같지만 완전히 다른 Thread의 sleep 함수랑 Object의 wait 함수를 이야기 해 보도록 하겠습니다. 이 둘은 쓰레드를 자게 하는 거니까, 왠지 같을 것 같은데, 실제로는 차이가 있어요. 예제 프로그램을 봅시다. 먼저 저는 My_object 객체 a와 b를 생성했어요. 그리고, worker를 200개 생성했는데요. 이 클래스의 내부를 봅시다. 이것은, Thread를 extend한 것인데요. 일단 My_object를 참조하는 레퍼런스 타입이 안에 들어있네요. 그리고, run 안에는 a.foo() 라는 친구를 수행하는데요. 그러면 My_object라는 클래스도 봐야 겠네요. 이 안에는 그냥 x가 start 되었다는 것과 끝났다는 것을 출력해 주기만 합니다. 그런데 내부에 wait..
최근댓글