시스템 및 네트워크프로그래밍
프로세스 및 파일 처리
fork()는 호출한 프로세스를 복제하여 자식 프로세스를 만드는 시스템 콜이며, 자식은 부모와 다른 PID를 가진다. fork()는 부모에게 자식의 PID를, 자식에게 0을 반환하므로 두 프로세스가 fork() 다음 문장부터 각각 실행된다. exec 계열 함수는 새 프로세스를 만들지 않고, 호출한 프로세스의 코드, 데이터, 스택, 힙을 새 프로그램의 이미지로 교체한다. 이때 PID는 바뀌지 않는다. 저수준 입출력은 파일 기술자(file descriptor)라는 정수를 사용하고, 고수준 입출력은 FILE 구조체를 가리키는 파일 포인터(FILE *)를 사용하며 버퍼링을 수행한다. fdopen()은 이미 열린 파일 기술자로부터 파일 포인터를 만들고, fileno()는 반대로 파일 포인터에서 파일 기술자를 얻는다.
메모리
메모리 할당 및 해제에서 동적 메모리는 실행 중 힙(heap) 영역에서 malloc 계열 함수로 할당받으며, 프로그래머가 free()로 명시적으로 해제하기 전까지 유지된다. 블록을 벗어나면 자동으로 해제되는 것은 지역 변수가 놓이는 스택 영역의 특성이다. 메모리 정렬 및 검색에서 힙 정렬은 평균과 최악의 경우 모두 O(n log n)이며 제자리 정렬이라 추가 메모리가 거의 필요 없다. 병합 정렬도 최악의 경우 O(n log n)이지만, 병합 과정에서 보조 기억공간이 추가로 필요하다. 메모리 Lock은 가상 메모리 페이지를 물리 메모리에 고정하여 스왑 아웃되지 않게 하는 기법이며, 임계영역을 보호하는 스핀락(spinlock)과 목적이 다르다.
이어지는 내용
- IPC(InterprocessCommunication)
- I/O 인터페이스 및 멀티플렉싱
- 스레드
- 시그널 기본
- 컴퓨터 네트워크
- 소켓 프로그래밍
- 자주 틀리는 점
로그인하면 하루 5단원까지 무료로 전체를 읽을 수 있습니다.
앱에서 이 단원 읽기