분류 전체보기 (40) 썸네일형 리스트형 [Linux] Thread (쓰레드) 1. Thread란 Thread : 프로세스 내에서 독립적인, 별도의 컴퓨팅 단위 현재 우리 컴퓨터에는 수십개의 프로세스가 돌고 있는데, 프로세스가 실시간으로 바뀔 때마다 Context - Switching이 일어나면서 새로운 Process가 실행되는 내용을 불러온다. (Context - Switching 이 반복되며 계속 실행하는 Process 가 바뀐다.) 그런데 Context - Switching이 생각보다 시간을 잡아먹는 행위이다. 그래서 Context - Switching에 드는 시간을 줄이는 것이 OS에서의 과제 중 하나였다. Process를 계속 바꾸는 것이 시간을 많이 잡아먹으므로 상대적으로 작은 정보를 옮기면서 여러 일을 수행할 필요가 있었다. 그래서 생긴 것이 Thread이다. 간단한 .. [Linux] Signal Handler 보충 시작하기 전 C에서 현재 시간을 출력하는 방법 #include #include int main () { time_t ct; struct tm tm; ct = time (NULL); tm = *localtime (&ct); printf ("%d-%d-%d hour: %d, min : %d, sec: %d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); } localtime 함수는 time_t 변수를 우리가 알아볼 수 있는 struct tm구조체로 변환해서 그 포인터를 넘겨준다. 따라서 *로 이 리턴값을 참조하여 struct tm 변수에 대입하였다. tm.tm_year은 1900년 기준으로 0이므로 +19.. [Linux] Semaphore 1. 들어가기 전에 다음의 코드를 한번 같이 작성해보자. shminit.c #include #include #include #include #include int main() { key_t key; int shmid; int* shmaddr; shmid = shmget(key, sizeof(int), IPC_CREAT | 0666); // key로 shmid 얻어옴 shmaddr = shmat(shmid, NULL, 0); // 2번째 매개변수 - 이 근처로 할당, 3번째 매개변수는 flag *shmaddr = 0; // 0으로 공유 메모리에 저장된 값을 초기화 printf("*shmaddr = %d\n", *shmaddr); return 0; } shmsum.c #include #include #inc.. [Linux] 공유 메모리를 이용한 데이터 교환 전 게시글에서 메시지 큐에 대해서 보았다. 이번에는 공유 메모리를 이용한 데이터 교환에 대해서 볼 것인데 메시지 큐와 구조는 매우 비슷하다. 다음의 코드를 shmwrite.c 라는 이름으로 작성해보자. #include #include #include #include #include int main() { key_t key = 1234; int shmid ; char* shmaddr; char buf[100]; shmid = shmget(key, 100, IPC_CREAT | 0666); printf("shmid = %d\n", shmid); shmaddr = shmat(shmid, NULL, 0); printf("shmaddr = %p\n", shmaddr); printf("Enter a string t.. [Linux] 메시지 큐(message queue) 1. 시작하기 전에 프로세스간 데이터를 주고 받는 두가지 방법이 있다. 1. 메시지 기반 2. 공유 메모리 기반 메시지(message) 기반은 앞에서 보았던 FIFO 와 굉장히 비슷하다. 한 프로세스가 send로 메시지를 보내면 다른 프로세스는 receive로 메시지를 받을 수 있다. 순차적으로 보냈던 메시지를 받으므로 메시지 기반의 방법을 일반적으로 메시지 큐(Message Queue)라 한다. 공유 메모리 (Shared Memory) 기반에 대해서도 간단하게 알아보자. 원래는 서로 다른 프로세스는 서로의 메모리를 공유할 수 없다. 한 프로세스에서 쓰는 메모리를 virtuall memory라고 하는데 이는 한 기계에서 고유한 physical memory 와 다르기 때문이다. 한 프로그램에서 x = 0인.. [Linux] pipe의 개념 및 구현 들어가기 전에 #include #include #include int main() { int fd, pid; fd = open("test.txt", O_RDWR | O_CREAT, 0666); printf("fd = %d\n", fd); write(1, "hello\n", 6); } 이 코드의 수행 결과로 우리는 아래의 출력을 볼 수 있다. 이를 통해 두가지를 알 수 있다. 첫번째는 어떤 파일을 open을 통해 open해도 fd(file discriptor)가 3 미만은 나오지 않는데 이를 통해 0, 1, 2는 이미 다른 파일 세개가 선점하고 있다는 것을 알 수 있다. (사실 유추하기는 어렵지만 이 코드를 통해 기억해두기를 바란다.) 두번째는 stdout이 fd가 1이라는 것을 이를 hello가 출력되는.. 오버로딩(Overloading) 과 오버라이딩(Overriding) 자바에는 다형성이라는 것이 있습니다. 다형성(polymorphism)이란 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미합니다. 이 다형성을 지원하는 방법으로 메서드 오버로딩 과 오버라이딩 이 있습니다. 그런데 이렇게 이야기해도 솔직히 잘 모르므로 오버로딩과 오버라이딩을 공부하고 예를 들어서 이해를 해보도록 하겠습니다. 1. 오버로딩 (Overloading) 같은 이름의 함수를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게 하는 것입니다. 예를 들어 필드 변수로 String name과 int age를 가지고 있는 Human 클래스가 있다고 가정해봅시다. 이 객체들을 여러개 만들고 싶은데 어떤 것은 이름만 알고, 어떤 것은 나이만 알고, 어떤 것은 이름.. [Linux] sort 명령어 및 '<' 와 '>' 그리고 '|' (1) sort , '' (right arrow) '>'는 명령어의 결과를 program의 stdout(출력 결과)를 file과 redirect해준다. 그래서 ls - l > b.txt 를 해주면 b.txt가 생기고 생긴 b.txt를 열어보면 ls -l 의 결과가 b.txt에 저장되어있는 것을 볼 수 있다. (3) '|' (vertical bar, pipe) a | b 를 해주면 a의 실행결과가 b에 redirect되어 실행된다. 예시를 보기 위해 다음과 같은 프로그램을 짜고 a.out으로 컴파일해보자 #include int main() { char buf[100]; while(gets(buf) != NULL) { printf("I say %s\n", buf); } return 0; } 그리고 ls | .. 이전 1 2 3 4 5 다음