POSIX Times 시스템은 Epoch 이후로 경과한 시간을 초 단위로 유지해야 Epoch은 세계 표준시 (Coordinated Universal Time, UTC, Greenwich Mean Time 또는 GMT로 불리기도 함) 기준으로 1970년 1월 1일 자정 00:00으로 정의됨 POSIX는 구현이 시스템 시간을 실제 시간과 날짜에 어떻게 정렬해야 하는지 명시 X #include time_t time(time_t *tloc); 시스템 시간에 접근한다 (Epoch 이후로 경과한 시간을 초 단위로 표현). tloc: NULL이 아닌 경우, 함수는 시간을 *tloc에 저장 time_t: long 형식 성공한 경우, Epoch 이후로 경과한 초의 수 반환 실패한 경우, (time_t)-1 반환 → 필수..
signal은 이벤트가 일어났을 때 발생했다는 사실을 프로세스에게 전달해주는 software notification다. 명령어 kill을 주면 목적지로 시그널을 준다. -l option은 available symbolic signal names의 list들을 준다. 프로세스는 도착한 시그널에 대해서 처리를 해줘야한다. → 시그널이 왔을 때 프로세스가 취해줘야 되는 default action이 있다. 터미널에서 ctrl+c → interrupt signal이 발생해서 지금 돌고 있는 프로세스에게 전달이 된다. 그러면 프로세스는 하던 작업을 멈추고 default action을 수행한다.(여기서는 강제 종료) Generating Signals #include int kill(pid_t pid, int sig)..
그램-슈미트 과정 임의의 벡터 집합으로부터 직교집합(Orthogonal set)을 구하는 과정 벡터를 다른 벡터에 사영시킨 것을 이용해 직교집합을 구할 수 있다. 집합이 직교집합인지 확인하는 것은 집합의 각 원소들에 대해 내적을 수행하는 것으로 확인할 수 있다. 예제를 풀어볼까? W = span{x1,x2,x3}의 직교기저를 구하여라 x1 = [1, -1, 2] x2= [2, 0, -1] x3 = [3, -1, -2] x1과 x2는 내적 결과 직교집합이다. x1 → v1, x2 → v2라 두자. v3 = x3 - ( ( x3와 v1의 내적 / v1과 v1의 내적) * v1 ) - ( ( x3와 v2의 내적 / v2와 v2의 내적) * v2 ) v3 = [3, -1 -2] - 0 - 8/5 * [2, 0,..
4년 전, 2020년에 저는 재수를 하러 기숙학원에 있었습니다. 특별한 이유가 아니면 학원 밖으로 나갈 수 없었습니다. 공부는 힘들었지만 그 힘듦을 털어놓을 수 있는 누군가가 제 곁에 있지 않았습니다. 돌이켜보면 그 사실이 제일 힘들었던 것 같습니다. 하루는 공부할 에너지도 없이 너무나도 우울했습니다. 이런 기분을 벗어나고자 책을 덮고 행복한 상상을 시작했습니다. 상상 속에서 저는 하늘을 날고 있었습니다. 비록 현실에서는 어디도 가지 못하고 책상 앞에 앉아있을 수 밖에 없었지만, 그래도 상상을 하는 순간만큼은 행복했습니다. 하지만 상상만으로는 부족했습니다. 하루종일 상상만 하며 살 수는 없습니다. 그래서 저는 웃어보기로 했습니다. 웃음을 지을 일이 생기지 않았지만, 나는 행복하다를 되뇌며 미소를 지었습니..
옛날에는 탐색으로 모든 문제를 해결하고자 노력했다(general problem solver(GPS)). → 하지만 매우 제한된 영역에서만 동작했다. 실제적인 문제 해결을 위해 나타난 시스템 → 전문가 시스템(expert knowledge) 전문가 시스템은 규칙으로 표현되는 지식을 통해 추론함으로써 복잡한 문제를 해결하도록 설계되었다. 인공지능 소프트웨어 최초의 성공적인 형태 지식의 중요성이 강조된다. 전문가 시스템 구성요소 지식베이스(Knowledge Base: KB) 어떤 특수한 문제 영역에 대한 사실이나 규칙으로 구성된다. 예시) 횡단보도에서 초록불이 켜지면 사람들이 건너간다. 추론엔진 KB에 있는 정보와 사실을 바탕으로, 사실로부터 규칙을 적용하는 과정을 진행하는 엔진 KB와 추론엔진은 독립적인 관..
pipe()를 호출하면 파이프를 만들고 두 개의 file descriptor table을 생성한다. → 읽기용 descriptor table(fd[0])과 쓰기용 descriptor table(fd[1]) 생성 부모와 자식이 pipe로 소통을 한다. 부모가 pipe 호출 파일 디스크립터 테이블 2개 생성 커널 안에 파이프 객체 생성 fd[1]을 가지고 작성, fd[0]으로 읽음 fork를 해서 자식 프로세스 생성 자식 프로세스는 대부분의 정보를 복사한다.→ 파일 디스크립터 내용 또한 복사됨 같은 파이프에 쓰고 읽을 수 있다. read한 데이터는 파이프에 저장되지 않고, 없어진다. 파이프 안에 read할 데이터가 있는데 read한 경우 → 그냥 read가 됨 파이프 안이 비어있는데 read한 경우 지금은 ..
디렉토리 엔트리 디렉토리 엔트리 쌍: 파일명과 inode 번호 파일 정보는 inode에 있다 -> 포인터 정보들 (inode 안에 실제로 파일 내용들이 있는 것이 아니라, 이 포인터를 쫓아가야 파일 내용들이 있다. → 실제 파일들의 크기는 다른데 inode들의 크기는 같다.) 디렉토리 관련 명령어 chdir로 작업 디렉토리를 변경할 수 있다. 현재 작업디렉토리의 정보를 알아오는 시스템콜 → getcwd 디렉토리도 파일이다.(특별한 타입의) 모든 디렉토리 안에는 디렉토리 엔트리들이 있다. 디렉토리도 접근하려면 open을 해야한다. 디렉토리 오픈 → opendir 시스템 콜 사용 DIR *opendir (const char *dirname); dirname → 우리가 열고 싶은 디렉토리의 이름 DIR : d..
Asynchronous operation 비동기식 operation. 사용자가 키보드를 누를 때 등.. 사용자가 하는 일은 Asynchronous operation unpredictable time(예측할 수 없는 시간에 일어난다) Concurrency 스레드: 하나의 실행 흐름 스레드를 하나 띄울 때마다 스레드가 할 일을 구현해야하는데 그 일을 함수가 한다. 2개의 스레드가 돌고 있다. → 2개의 독립적인 실행 흐름이 있다. concurrent와 비슷한 말: simultaneous(뜻은 둘 다 동시에) 어떻게 두 개가 동시에 돌리는 것처럼 보이게 만들 수 있을까 → 매우 빠르게 번갈아가면서 실행한다. Multiprogramming 프로세스가 생성이 되면 메모리에 위치하게 된다. 그 위치는 ready q..
chmod 사용자 권한을 바꿀 수 있다. -rw-r—-r— 첫 번째: owner에게 주어진 권한 두 번째: 이 파일의 그룹 사용자에게 주어진 권한 세 번째: 그 외의 사람들에게 주어진 권한 문법: chmod [user/group/others/all] +(-)[permission].[file(s)] ex) 모두한테 실행 권한을 준다. 예시) chmod a+x test.txt touch touch test.txt → test.txt 생성 ps ps : 지금 running되는 process를 볼 수 있다. kill kill: process를 죽이고자 할 때 사용한다. ex) kill -9(시그널) 1255(프로세스ID) input/output redirection (”piping”) program_a | pr..