분류 전체보기502 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. 람다(lambda)란 무엇인가? - 알고리즘 공부를 하다보면 람다(lambda)라는 식을 자주 접하게 된다. - 도대체 람다가 무엇인지 같이 알아보자. 1. 개념 람다는 어떤 함수의 매개변수로 다른 함수를 넣고 싶을 때 사용한다. 람다는 anonymous function 이라는 명칭을 갖고 있다. 선언 없이 또는 이름 없이 사용할 수 있는 함수다. 람다의 특징은 일회성이다. 함수의 선언부가 없으므로, 한번 사용하면 그걸로 끝이다. 람다의 핵심은 지연실행 또는 지연연산이다. 이는 필요할 때만 호출하여 사용하는 방식으로 메모리상의 불필요한 연산을 줄인다는 것을 의미한다.(장점) 2. 사용법 - 예시코드를 보면서 사용법을 익혀보자. print((lambda x, y, z : x + y + z)(1, 1, 1)) a) anonymous fun.. 2021. 4. 16. 오늘의 알고리즘(4월 16일) 1. 백준, 소트인사이드, 1427번 www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 2. 생각해보자 숫자를 문자열로 입력받는다. 입력받은 문자열을 for문을 사용하여 문자 단위로 나눈다. 나눠진 문자를 리스트에 넣는다. 내림차순 정렬 후 재조립하여 문자열로 만든다. n = input() array = list() for data in n: array.append(data) array.sort(reverse = True) #내림차순 정렬 n = "".join(array) print(n) 3. 해설 및 코드분석 - 이번 문제의 핵심은 각 자리수를 .. 2021. 4. 16. 16. 프로세스 구조(4) - BSS와 Data 1. BSS와 Data 영역 프로세스 구조에서 Data 영역은 BSS와 Data 영역으로 나뉜다. a) BSS - 초기화 값이 없는 전역변수를 의미한다. b) Data - 초기화 값이 있는 전역변수를 의미한다. 2. 코드를 통해서 살펴보자 - 예제 코드 int global_data1; //초기화 값이 없는 변수 int global_data2 = 1; // 초기화 값이 있는 변수 int main() { int *data; data = (int *) malloc(sizeof(int)); *data = 1; printf("%d\n", *data); return 0; } - 프로세스 - 딱 두가지만 확인하자. main 함수 내부에 있는 변수(= 지역변수)는 Stack에 쌓인다. main 함수 밖에 있는 변수(=.. 2021. 4. 15. 오늘의 알고리즘(4월 15일) 1. 백준, 수 정렬하기, 2750번 www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 2. 생각해보자. 첫번째 입력 N은 입력될 숫자의 개수다. 첫번째 입력 N을 이용하여 N번의 for문을 통해 숫자를 입력 받는다. N개의 숫자는 리스트에 저장한 후 정렬 함수(sort)를 이용하여 정렬한다. n = int(input()) numbers = [] for _ in range(n): numbers.append(int(input())) numbers.sort() for .. 2021. 4. 15. 15. 프로세스 구조(3) - Heap 1. Heap 이란? Heap은 개발자에 의해 동적으로 할당되는 메모리 영역이다. 파이썬과 같은 최신언어는 동적할당을 요구하지 않는다. 하지만, 컴퓨터의 내부 요소까지 모두 조절할 수 있는 C언어의 경우 동적할당은 필수적이다. a) 어떻게 동적할당을 할까? #include #include int main() { int *data; // 포인터 변수(주소값을 갖고 있다) data = (int *) malloc(sizeof(int)); // C언어에서 int는 32bit = 4bytes의 크기를 갖는다. // data라는 변수는 heap의 메모리 공간에 올라가게 된다. *data = 1;// 포인터 변수의 주소에(= 위치에) 1을 넣는다. printf("%d\n", *data); return 0; } mal.. 2021. 4. 14. 오늘의 알고리즘(4월 14일, feat.Union Find) 1. 백준, 친구 네트워크, 4195번 www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 2. 생각해보자 - 입력값은 다음과 같다. 2는 테스트 케이스의 수(N) 3은 친구 관계의 수(F) / F는 100,000을 넘지 않음 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진다. 친구 관계는 두 사용자의 아이디로 이루어져 있다 / 알파벳 대문자 또는 소문자로 길이 20 이하의 문자열 친구 관계가 생길 때마다, 두 사람의 친구 네트워크에 몇명이 있는.. 2021. 4. 14. 이전 1 ··· 39 40 41 42 43 44 45 ··· 56 다음