CS
-
[OS] Process와 Thread의 차이, Time-sharing, Context SwitchingCS/OS 2023. 2. 26. 15:03
Process란 운영체제가 프로그램을 실행하고 관리하는 단위, 개체를 의미한다. (Processor는 Cpu로, 헷갈리지 말 것ㅋㅋ!!) Process는 프로그램 실행코드, 데이터 영역, 스택, process control block으로 구성되어 있다. 반면 Thread는 Process처럼 별도의 실행 개체로 관리되는 것이 아니라 Process 내부에서 동시 실행(concurrent)을 지원하는 방식이다. 해당 Process가 실행 중(Running)일 때 그 프로세스 내부의 Thread들을 스케줄링하는 방식으로 동시 실행을 제공한다. Thread도 ready, running, blocked 상태를 가진다. 그러나 Thread에 suspend는 없다. Thread가 포함된 Process가 종료되거나, s..
-
[OS] 운영체제의 역할CS/OS 2023. 2. 26. 14:54
-운영체제의 역할 1. 하나 이상의 하드웨어 리소스 활용 및 관리(프로세서, 메인 메모리 등) 2. 시스템 사용자에게 일련의 서비스 제공 3. 보조 메모리 및 I/O 장치 관리 운영체제란? 응용 프로그램 실행을 제어하는 프로그램. 애플리케이션과 하드웨어 간의 인터페이스. 컴퓨터 하드웨어 리소스를 관리하고 컴퓨터 프로그램을 위한 공통 서비스를 제공하는 소프트웨어의 모음이다. -운영체제가 제공하는 것 1. 프로그램 개발 환경 2. 프로그램 실행 3. I/O 디바이스 접근 (드라이버 접근) 4. 파일 접근 제어 5. 시스템 접근system access 6. 에러 감지 및 응답 7. 계정 관리 - 컴퓨터 시스템 내의 자원을 효율적으로 관리한다. - 프로그램 실행 시 오류 검사 및 복구를 지원한다. - 사용자나 ..
-
유클리드 호제법(최대공약수 재귀로 구하기)CS/Algorithm & Data Structure 2023. 2. 21. 02:52
두 자연수의 최대공약수를 구하는 대표적 알고리즘. 특징: 자연수 A,B에서 A%B=R일 때 A,B의 최대공약수 == B,R의 최대공약수 예를 들어 A: 192와 B: 162의 최대공약수를 구할 때(GCD(192,162)) Level A B 1 192 162 2 162 30 3 30 12 4 12 6 즉, 192와162의 최대공약수는 12와 6의 최대공약수(즉, 6)과 동일하다. 따라서 재귀함수를 통해 R이 0이 아닌 동안 두 수를 나누도록 구현할 수 있다. def gcd(a, b): if a%b==0: return b return gcd(b, a%b) print(gcd(192,162))
-
Python의 queueCS/Algorithm & Data Structure 2023. 2. 21. 02:30
파이썬에서 큐를 구현할 때 1. 리스트로 구현하기 2. deque라이브러리 이용 리스트로 구현하는건 시간복잡도가 더 높으니 deque을 이용하는 것이 좋다. 통상적으로 삽입은 append(), 삭제는 popleft()를 사용한다. 오른쪽으로 들어온 요소가 왼쪽으로 나간다고 생각하면 편할 것 같다. from collections import duque queue = deque() queue.append(5) queue.append(3) queue.popleft() => 3
-
[구현] 왕실의 나이트CS/Algorithm & Data Structure 2023. 2. 21. 01:58
나는 아래와 같이 풀었다. 1,1칸부터 8,8칸까지 돌며 조건에 맞는 칸만 체크를 했다. input_data = input() r = int(input_data[1]) c = ord(input_data[0])-ord('a')+1) cnt=0 for i in range(1,9): for j in range(1,9): if abs(r-i)==2 and abs(c-j)==1: cnt+=1 if abs(r-i)==1 and abs(c-j)==2: cnt+=1 print(cnt) 처음에 이동할 수 있는 방향이 몇 개 없으니 그것만 체크하면 되겠다 라고 생각했다 근데 직전에 푼 브루트포스 문제의 여파인지, 8 x 8 좌표는 작으니 그냥 다 체크하자고 생각해버렸던 거 같다. 정답으로 보여주신 코드인데, 처음 생각대로..
-
빅오 표기법, Python 시간 복잡도CS/Algorithm & Data Structure 2023. 1. 31. 15:20
1. Big-O Notation 빅오 표기법 가장 빠르게 증가하는 항만 고려하면 된다.(상한) -> 연산 횟수가 3N^3 + 5N^2 + 1000000이라면 O(N^3)으로 표현 - 좋은 것 부터(빠른) O(1) 상수 시간 O(logN) 로그 시간 O(N) 선형 시간 O(NlogN) 로그 선형 시간 O(N^2) 이차 시간 O(N^3) 삼차 시간 O(2^n) 지수 시간 O(N!) 팩토리얼 시간 - 나쁜 것 까지(느린) 예시 1) N개 데이터 합을 구하는 코드 array = [3,5,1,2,4] sum = 0 for x in array: sum += x print(sum) 정답: O(N) 예시 2) 2중 반복문을 이용한 코드 array = [3,5,1,2,4] for i in array: for j in a..
-
[Design Pattern] Iterator 반복자 패턴CS/Design Pattern 2023. 1. 29. 19:09
https://www.youtube.com/watch?v=T3sXKtlr0Ow&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=2 Container / Aggregator: 동일한 형태의 데이터를 여러 개 지닌 것 그 예시로는 Array, Linked List, Tree, Graph, Table(DBMS) 등이 있다. 1. Iterator의 개념 이 데이터들을 가져오는 방법은 Aggregator의 종류에 따라 모두 다르기 때문에 이를 통일된 방법으로 가져오도록 돕는 것이 Iterator pattern이다. 다양한 형태의 Aggregator의 데이터에 접근할 때에 표준화 된 공통API. 한편으로는 Aggregator의 자료구조를 노출하지 않아도(혹은 몰라도) 내부 데이터에..
-
[Design Pattern] 시작하기CS/Design Pattern 2023. 1. 29. 17:48
최근 인터랙티브 무비 개발을 하면서 클래스 간의 관계를 맺고 정리하는 부분에서 부족함을 느꼈다. 이 부분의 발전을 위해서 디자인 패턴을 공부해보기로 했다. https://www.youtube.com/watch?v=An7kqZ5D7j8&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ 디자인 패턴: 패턴처럼 자주 나타나는 클래스 사이에 관계를 맺는 방법 하나의 클래스가 많은 기능을 갖는 것은 바람직하지 않다. 한 클래스의 역할은 하나 내지는 최소한인 것이 좋다. 이렇게 하면 문제 발생 시 코드 수정/유지보수가 편하고 새로운 기능 추가하기에도 편하기 때문이다. GoF개발자분들이 만든 디자인 패턴이 가장 대표적이다. GoF는 객체지향 문제점을 분석해 카탈로그화 하여 아래와 같이 패턴으로 ..