Work | Posted by 흑목 2007/11/20 14:16

자원의 한계

http://dv.ajou.ac.kr/bbs/view.php?id=comp_2007_fall&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=254

모든 프로그램은 실행이 되면 프로세스라는 것으로 바뀌죠. 운영체제는 모든 프로세스가 사용할 수 있는 자원을 제한합니다. 여기서 자원이라 함은, 파일, 메모리, 사운드, 디스크, 마우스, 프로그램이 사용할 수 있는 모든 것을 의미하죠.

Windows도 예외가 아닙니다. 프로세스가 사용할 수 있는 최대 자원을 제한합니다. 여기에는 한 프로세스가 동시에 열 수 있는 파일의 개수도 포함됩니다. 감이 잡히시죠? 제가 기억하기로 특별한 설정을 하지 않는 이상 Windows에서 하나의 프로세스가 동시에 열 수 있는 파일의 개수는 512개로 알고 있습니다.여기에 표준 입력(stdin), 출력(stdout), 에러(stderr) 스트림도 포함이 됩니다. 따라서 실제 동시에 열 수 있는 파일의 개수는 509개가 되겠죠.

예제 프로그램의 루프에서 fopen으로 연 파일을 닫지 않고 계속 같은 파일을 열게 되는데 이것은 같은 파일이라고 하더라도, 프로세스의 입장에서는 동시에 사용하고 있는 파일의 개수가 늘어나게 되는 것을 의미합니다. 따라서 509번 열게 되면 자원의 한계에 도달하여 오픈 에러가 나는 것입니다. (이런 표준 입력 함수가 에러난 이유를 알고 싶으면 errno라는 것을 인터넷에서 찾아보시기 바랍니다.)

위와 같은 이유 때문에 실습시간에 항상 다 사용한 파일은 fclose를 통해서 닫아주라고 하는 것이며, 같은 맥락으로 동적 할당한 메모리를 다 사용하였으면 반드시 free를 해주라는 말을 하는 것입니다. 이는 모두 프로세스가 실행중에 사용할 수 있는 자원이 제한되어 있기 때문입니다.

PS. 위에 대한 내용은 정컴 전공 과목인 시스템 소프트웨어 과목을 들으면 알 수 있는 내용이며, Advanced Programming in the Unix environment 책을 보면 좀더 심화하여 공부 할 수 있습니다.

'Work' 카테고리의 다른 글

자원의 한계  (0) 2007/11/20
Visual Studio의 fflush 이야기  (1) 2007/11/20
TimeAttack  (0) 2007/03/29
Buffering Error  (0) 2006/05/18
Builder Listview Column Sorting  (0) 2006/03/31
Variant Conversion  (0) 2006/03/31