목록전체 글 (354)
엔지니어가 되고 싶은 공돌이

8. 1. Fork and Exec - Program Execution: system(const char *string); 실행할 프로그램을 string에 넣습니다. - fork(): Process를 생성하는 함수. - fork함수를 호출한 Process를 Parent Process, fork에 의해 새로 생성된 Process를 Child Process. 1) 부모 프로세스가 fork 함수 모듈을 호출합니다. 2) fork함수 모듈이 새로운 프로세스를 생성합니다. 3) Child Process는 Parent Process의 Memory를 복사합니다. 4) Parent Process는 Child Process의 PID를 받고, Child Process는 0을 Return 받습니다. 5..

7. 1. Definition of Process - Process: Main Memory에 존재하면서 실행 중인 Program. - Program: Secondary Memory에 저장된 명령어와 코드들의 집합. - Processor: CPU. - Virtual Memory 1) Stack: Local Variable 을 저장하는 영역. 2) Heap: 동적 메모리 할당을 위한 영역. 3) Data: Global Variable 을 저장하는 영역. 4) Text: 프로그램 실행코드를 저장하는 영역. - Search PID: getpid() - Search PPID: getppid() - getpid()는 함수를 호출한 프로세스의 pid를, getppid()는 함수를 호출한 프로세스..

6. 1. File System - Unix에서 File은 크게 3종류가 있습니다. 1) General File: Text File, Executive File 처럼 우리가 일반적으로 알고있는 파일. 2) Directory: 리눅스에서는 Directory도 파일로 처리합니다. 3) Special File: Hardward. - ls -l 명령을 사용해서 파일의 종류를 확인할 수 있습니다. General File은 -로 시작, Directory는 d로 시작, Special File은 b or c 로 시작합니다. - Composition of Files 1) File Name: 사용자가 접근할 때 사용, 최대 255자까지 가능, 대소문자 구분함. 2) inode: 번호로 표시, 파일..

5. 1. High-Level File I/O - File Pointer: File을 가리키는 포인터. (FILE*) 1) FILE *fopen(const char *filename, const char *mode); filename으로 지정한 파일을 해당 mode로 열고 File Pointer를 리턴합니다. 모드에는 r, w, a 처럼 읽기, 쓰기 등을 제어할 수 있습니다. 2) int fclose(FILE *stream); 3) Character Input Function: fgetc(), getc(), getchar(), getw() 4) Character Output Function: fputc(), putc(), putchar(), putw() 5) String Input Func..

4. 1. Low-Level File I/O - 파일기술자(File Descriptor): 현재 열려있는 파일을 구분하기 위한 정수값. - 0은 Standard Input, 1은 Standard Output, 2는 Standard Error를 나타내며, 3부터 파일을 순서대로 할당합니다. 1) int open(const char *path, int oflag, mode_t mode); path에 filename을 입력하고, oflag로 파일의 읽기쓰기의 허용과 같은 플래그 값을 지정하며, mode로 소유자, 그룹, 기타 사용자에 대한 읽기/쓰기/실행 권한을 할당합니다. 2) int close(int fildes); Process에서 열 수 있는 파일의 개수는 제한되어 있기..

3. 1. GCC Option 1) -o : 출력 파일명을 정하는 옵션. ex) gcc -o p c1.c : c1.c 라는 파일을 p라는 실행파일로 만듭니다. 2) -c : 컴파일 작업만 하고 싶은 경우 사용하는 옵션. ex) gcc -c c1.c : c1.c 라는 c1.o 라는 object file로 만듭니다. 3) -g : 컴파일된 파일에 디버깅 코드를 추가하는 옵션. ex) gcc -g -o c1 c1.c 4) -0 : 코드를 최적화 하는 옵션. 기본값은 일반적으로 -01이며, -00이면 최적화 X, -02이면 가장 많이 최적화를 수행합니다. 5) -l : 어떤 라이브러리를 사용하는지 지정하는 옵션. -L : 그 라이브러리가 어느 디렉토리에 있는지 알려줌. 3. 2. ..

2. 1. Access of Linux Server - VMware와 Ubuntu가 새로운 Linux 환경을 만드는 방법이라면, 기존에 만들어진 Linux 환경에 Access하는 방법도 존재합니다. - Putty와 같은 프로그램을 사용하면 됩니다. 1) Putty를 실행시킵니다. 2) 접속하고자 하는 Linux Server로부터 정보를 미리 제공받아, Host와 port를 입력하고, Connection type을 지정합니다. 3) Linux Server에 연결이 되면, Server에서는 ID와 PW를 요구할 수 도 있습니다. 4) 일반적인 Server의 경우 접속하게 되면, CMD처럼 검은 화면에 글씨가 보일텐데, 이 화면이 Shell이 입력되고 실행되는 공간입니다. - BASH: 가장 많이 쓰이는 Li..

1. 1. History of Unix - Unix System은 1969년 AT&T Bell Lab. 에서 Kenneth Lane Thompson, Dennis MacAlistair Ritchie께서 개발하신 System입니다. - 1973년 C언어를 이용하여 재개발이 진행되었고, 고급언어로 개발된 최초의 OS입니다. - 그 후, 상용유닉스(System V)와 BSD 계열로 분리되어 각각 발전하게 되었고, 1989년 AT&T와 Sun Microsystems(현재는 Oracle로 합병)가 두 계열의 장점을 결합하여 SVR4를 공동개발하고, 이 Unix가 오늘날 사용하는 대부분의 Unix의 기반이 되었습니다. - Unix System은 시간이 흐르며 계속 발전해왔고, 현재는 그 종류가 매우 다양합니다. -..

9. 1. Algorithm - 디스크 안에 있는 파일들을 정렬하기 위해서 여러 알고리즘을 사용할 수 있습니다. 파일을 정렬하기 위해서 디스크 안에 있는 파일을 메모리 안으로 읽어와 판독을 진행하고, 정렬한 뒤, 정렬한 파일들을 디스크에 기록합니다. 1) Key를 정렬하기 위해서 Heap Sort를 사용합니다. Key들이 메모리 안에 로드되는 동시에 정렬을 수행할 수 있습니다. 2) 용량이 큰 파일들을 정렬하기 위해서 External Sort를 사용합니다. a) Secondary Storage에 있는 정렬하고자 하는 파일들을 여러 개의 Block으로 나눕니다. b) 각각의 Block들을 Main Memory로 읽어와서 Block단위로 Sorting을 진행하고, 다시 S..

8. 1. Index - Definition: Key List와 Reference Field를 포함한 Table. - Index. 1) Index File, Data File을 따로 만들어서 관리하며, Data File의 Address of Record를 Index File의 Reference Field에 저장하여 Index File에서 Key Search를 통해 Data File을 찾을 수 있게 합니다. 2) Index File은 정렬되어 있지만(Data가 삽입, 삭제시에도 정렬), Data File은 정렬하지 않아도 됩니다. 3) 하나의 Index Entry는 하나의 Record Entry를 관리합니다. 4) Record를 더 효율적으로 관리하고, Recor..