CS/System Software5 fork() vs clone() clone 과 fork는 새로운 프로세스를 생성한다는 관점에서는 비슷합니다. 하지만 fork 는 사실 clone() 시스템 콜이 레이어드 되어 있는 라이브러리 함수입니다. fork와는 다르게 clone()은 자식 프로세스가 실행 컨텍스트를 호출 프로세스와 공유할 수 있게 해준다. 예를들어 메모리 공간, 파일 디스크립터 테이블, 시그널 핸들러 테이블 등을 공유한다. clone 의 주 사용처는 공유되는 메모리 공간에서 동시에 실행되는 쓰레드 구현이다. 자식 프로세스가 clone()으로 생성되면, 가장 처음 fn(arg)라는 함수를 호출한다. 이렇게 fn 을 호출하는 것은 fork와 다른데, 아시다시피 fork를 호출하고나서는 자식 프로세스는 fork 호출 시점부터 실행을 시작하기 때문이다. fn argume.. 2023. 3. 12. 좀비 프로세스 vs 고아 프로세스 fork()와 exec() fork()와 exec()는 모두 한 프로세스가 다른 프로세스를 실행시키기 위해 사용 → 즉, 자식 프로세스를 생성 fork() 시스템 호출은 새로운 프로세스를 위한 메모리를 할당 (부모의 내용을 그대로 복사하여 새로운 메모리 공간에 새롭게 할당하여 자식 프로세스를 생성) exec()는 fork()처럼 새로운 프로세스를 위해 메모리를 할당하지 않고, exec()를 호출한 프로세스에 덮어씌워지며 부모 프로세스의 내용을 복사하지 않음. 자식 프로세스가 자동으로 exec() 실행하여 부모 프로세스 내용 전부 지움. 좀비 프로세스 프로세스가 종료되었음에도 불구하고 메모리상에서 프로세스에 대한 정보가 사라지지 않은 상태 자식 프로세스가 부모 프로세스보다 먼저 종료되는 경우 좀비 프로세스.. 2023. 3. 12. O_APPEND의 기능 이걸 왜 써? 시스템 소프트웨어 공부하면서 하찮은 호기심일 수 있지만 open() 함수의 플래그 중 O_APPEND의 정확한 기능을 알지 못했다. 그래서 정확한 의미를 알아보았다. 핵심만 말하자면 O_APPEND 플래그를 추가해주면 write할 때 알아서 파일의 끝으로 file offset이 간다. 참고로, 파일에 내용을 추가하는 append하는 행위는 파일 공간 넘게 요구하면 auto로 용량을 늘린다. 깔끔한 코드를 위해서 원래는 어떤 내용을 원본 훼손 없이 파일에 추가하기 위해서는 fd = open("abc.txt", ...); lseek(fd, 0, SEEK_END); write(fd, APPEND할 내용(buf), APPEND하고 싶은 SIZE); 이렇게 file offset를 설정해줘야 하는 번.. 2023. 3. 12. SRAM vs DRAM DRAM DRAM is widely used as a computer’s main memory. Each DRAM memory cell is made up of a transistor and a capacitor within an integrated circuit, and a data bit is stored in the capacitor. Since transistors always leak a small amount, the capacitors will slowly discharge, causing information stored in it to drain; hence, DRAM has to be refreshed (given a new electronic charge) every few milli.. 2023. 3. 12. 이전 1 2 다음