본문 바로가기

전체 글502

25. 스레드의 장단점 1. 스레드의 장점 a) 사용자에 대한 응답성 향상 하나의 프로세스 안에서 하나 이상의 작업(멀티 테스킹, 멀티 프로세싱)을 가능하기 때문 b) 자원 공유의 효율성 프로세스간의 자원 또는 데이터 공유를 위한 IPC와 같은 번거로운 작업이 필요없음 프로세스 내부에서 스레드 간의 소통이 가능하기 때문 번거로운 작업이 필요 없기에 그만큼 자원을 적게 사용한다는 의미 c) 작업 분리를 통한 코드의 간결화 각 스레드의 작업에 맞게 코드를 작성하기 때문 하지만, 개발자가 작성하기 나름. 즉, 개발자의 실력에 따라 편차가 크다. 2. 스레드의 단점 a) 여러 스레드 중 하나에만 문제가 생겨도, 전체 프로세스가 영향을 받음 스레드는 하나의 프로세스 안에 존재함 여러 스레드 중 하나라도 문제가 생기면 프로세스 자체에 문.. 2021. 5. 4.
오늘의 알고리즘(4월 29일) 1. 백준, 수 정렬하기3, 10989번 www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 2. 생각해보자 첫 입력값 N은 앞으로 입력될 정수의 개수 N개의 입력값을 array에 입력받는다. 파이썬 기본 정렬 알고리즘을 사용하여 오름차순 정렬 후 한개씩 출력한다. n = int(input()) array = [] for _ in range(n): data = int(input()) array.append(data) array.sort() for data in array: pri.. 2021. 4. 29.
24. 스레드란? (thread 개념) 0. 프로세스 부분을 끝낸 기념으로... - 컴퓨터 시스템은 다음과 같이 이루어져 있다. - Windows나 Mac과 같은 시스템 SW 또는 OS를 만드는 사람을 시스템 엔지니어라고 부른다. - 시스템 엔지니어가 만든 함수(api, library, etc)의 사용법을 익히고 응용하는 것이 응용 프로그래머다. - 시스템 엔지니어가 만든 함수를 익히는 대표적인 방법 중 하나가 python이나 java같은 언어를 배우는 것이다. - 좋은 개발자가 되기 위해서는 응용 프로그램의 영역뿐만 아니라 시스템 영역을 아는 것이 핵심이다. - 모든것을 한번에 완벽히 이해하기는 힘들지만, 좋은 개발자가 되기 위한 밑거름을 만들고 있다고 생각하자. 1. Thread 개념 스레드는 다른 이름으로 Light Weight Proc.. 2021. 4. 29.
23. 코드를 통한 프로세스 실행과정의 이해 - 지금까찌 프로세스를 이해하기 위한 다양한 개념들을 배웠다. - 실제 코드를 보면서 그동안 익힌 프로세스 개념들을 복습해보자. 1. 예제 코드를 통한 프로세스의 이해 #Include #Include #Include #Include Int main() { int fd; fd = open("data.txt".O_RDONLY); if(fd == -1) { printf("Error: can not open file\n"); /* 파일을 열지 못하므로 그냥 종료 */ return 1; } else { printf("File opened and now close_\n"); close(fd); return(); } } a) 위의 소스코드가 실행되기까지의 과정 소스코드가 컴파일 된다. 컴파일된 소스코드로 이루어진 실.. 2021. 4. 28.
오늘의 알고리즘(4월 28일) 1. 백준, 좌표 정렬하기, 11650 www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 2. 생각해보자 a) 문제 이해 첫번째 입력값 N은 앞으로 입력될 좌표의 개수를 의미한다. 주어진 좌표의 x와 y 값을 기준으로 오름차순 정렬을 한다. b) 어떻게 풀까? 데이터를 튜플 형식으로 입력받는다. x값을 비교하여 정리하는데, x값이 동일한 경우 y값을 비교하는 조건문을 만든다. 3. 코드 해설 및 분석 파이썬.. 2021. 4. 28.
22. 프로세스 - IPC 기법(signal, socket) - IPC 기법이란, 컴퓨터 구조적으로 불가능한 커뮤니케이션 간의 소통을 가능하게 하는 일종의 우회방법이다. - 다양한 IPC 기법이 존재하지만, 가장 많이 사용하고 있는 signal과 socket이 있다. - 사실 signal과 socket은 IPC를 위해서 만들어진 기능은 아니지만, IPC가 가능하기에 많이 사용되고 있다. - signal과 socket의 개념을 간단하게 알아보자. 1. Signal 기법이란? 유닉스에서 30년 이상 사용된 전통적인 기법 어떤 커널 또는 프로세스에서 다른 프로세스에게 어떤 이벤트가 발생되었는지를 알려주는 기법 프로세스 코드에 시그널 핸들러를 등록하여, 해당 시그널을 처리하는 방식으로 동작한다. a) Signal 이란? 시그널은 운영체제에 기본적으로 정의되어 있는 이벤트.. 2021. 4. 27.
21. 프로세스 - IPC기법(공유메모리) 1. 공유메모리(shared memory) 기법 커널 영역에 메모리 공간을 만들고, 해당 공간을 변수처럼 쓰는 방식 message queue처럼 FIFO 방식이 아니라, 해당 메모리 주소를 마치 변수처럼 접근하는 방식 공유 메모리의 key를 가지고, 여러 프로세스가 접근 가능 2. 공유메모리 예제 코드 a) 공유메모리 생성 및 주소 얻기 shmid = shmget((key_t)1234, SIZE, IPC_CREAT|0666)) // shmid = shared memory id shmaddr = shmat(shmid, (void *)0, 0) // shmaddr = shared memory address b) 공유 메모리에 쓰기 strcpy((char *)shmaddr, "Linux Programming".. 2021. 4. 26.
20. 프로세스 - IPC 기법(메세지 큐) 1. 메세지 큐(Message Queue) 큐(Queue) 자료구조를 이용한 IPC 기법 기본적으로 FIFO 방식으로 데이터를 전송한다. a) 그림으로 보는 메세지 큐 기법 간단하게, A라는 프로세스에서 데이터를 insert하면 B라는 프로세스에서 받아오는 방식으로 통신한다. b) 메세지 큐 예제 코드 - 간단한 예시 코드를 통해 메세지 큐의 개념을 살펴보자. 프로세스 A에서 데이터를 삽입 msqid = msgget(key, msgflg) // key는 1234, msgflg는 옵션 msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) // msgsnd = message send 프로세스 B에서 프로세스A가 삽입한 데이터를 반환받는다. msqid = msgget(key, msg.. 2021. 4. 23.
19. 프로세스 - IPC 기법(파일, 파이프) - IPC 기법을 온전히 이해하기 위해서는 코드를 기반한 이해가 가장 적합하다. - 이를 위해서는 C언어 기반의 지식을 알고 있어야 하고, 실제로 IPC 기법을 구현한 코드를 이해하기는 그 복잡성으로 인해 쉽지않다. - 그러므로 이번 포스팅에서는 각 IPC 기법의 특징과 개념을 이해하는 것에 중점을 두자. 1. File 사용 기법 shared.txt와 같은 파일에 현재 커널 영역의 상태 정보를 기입한다. 통신이 필요한 프로세스의 상태정보를 알기위해 shared.txt 파일을 읽고 확인하다. 이 과정을 반복한다. a) File 사용기법을 잘 사용하지 않는 이유 프로세스에서 통신이 필요할 때마다 매번 shared.txt 파일을 읽어야 한다. 프로세스의 커널 영역의 상태정보가 변할 때마다 해당 파일을 upda.. 2021. 4. 22.
18. 프로세스 - IPC의 개념 1. IPC(Inter-Process Communication) 배경지식 - 운영체제에서 프로세스 간의 직접적인 커뮤니케이션(= 통신) 방법은 존재하지 않는다. - 그러나 프로세스 간의 커뮤니케이션이 필요할 때, 사용할 수 있는 방법을 IPC라고 한다. a) 프로세스간 통신이 불가능한 이유 프로세스는 다른 프로세스의 공간을 접근할 수 없다. 이는 프로세스의 데이터나 코드가 바뀔 가능성을 없애기 위함이다. (프로세스 데이터 변경가능 = 해킹 위험성) b) 프로세스간 통신이 필요한 이유 요즘 CPU는 코어를 적게는 8개, 많게는 64개까지 갖고있다. CPU의 효율/성능을 높이기 위해 여러 코어를 동시에 활용하도록 다수의 프로세스를 동시에 실행시킨다. 다양한 프로세스를 동시에 실행시키는 경우, 프로세스간의 상.. 2021. 4. 21.
17. 프로세스 구조 - 컨텍스트 스위칭(context switching) 1. Context Switching 이란? 어떤 프로그램을 실행하기 위해서는 해당 프로그램을 스케줄러에 등록한다. 스케줄러에 등록된 프로그램을 프로세스 A라고 하자. 프로세스 A의 상태가 ready에서 running으로 전환되면서 소스코드가 읽히면서 프로세스 메모리에 차곡차곡 쌓이게 된다. 이때, 다른 프로그램인 프로세스 B를 실행하려고 한다. 프로세스 A는 block 또는 ready 상태로 변하고, 프로세스 B의 상태가 running으로 바뀌게 된다. 프로세스가 바뀌는 이 과정을 컨텍스트 스위칭이라고 하는데 , 이 과정에서 PC와 SP가 중요한 역할을 한다. 2. 어떤 과정을 거칠까? - 간단한 예제를 이용하여 컨텍스트 스위칭이 어떻게 진행되는지 알아보자. int global_data1; int gl.. 2021. 4. 20.
오늘의 알고리즘(4월 19일) 1. 백준, 나이순 정렬, 10814번 www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 2. 생각해보자 a) 기본조건 첫 입력값 N은 주어질 데이터의 개수 N개의 나이와 이름을 한 쌍으로 하는 데이터가 주어진다 나이를 기준으로 오름차순 정렬시킨다. 나이가 같으면 가입한 순서로 정렬시킨다. b) 이렇게 풀면 될까? 튜플을 이용하여 데이터의 짝을 형성시킨다. 나이를 기준으로 정렬한다. 나이가 같은 경우, 입력된 순서를 기준으로 정렬한다. 3. 해설 및 코드분석 n =.. 2021. 4. 19.