CS 29

Queue (FIFO, 순차적자료구조)

순차적 자료 구조 중 Last In First Out에 대표적으로 Stack이 있었다면, First In First Out 자료 구조에는 큐(queue)가 있다. 먼저 들어온 구조가 리스트 front에 자리잡고 스택과 같이 차곡차곡 쌓이다가 pop될때 (큐에서는 dequeue 라고한다), front에 있는 자료가 나가는 구조이다. stack에서 배웠던 push가 enqueue, pop이 dequeue로 표현된다. 이 큐를 파이썬을 사용하여 클래스로 구현하면 다음과 같다. class Queue: def __init__(self): self.items = [] self.front_index = 0 def enqueue(self, value): #push와 같은 역할 self.items.append(value..

스레드 관리(Thread management)

프로세스는 자원을 할당받고 자원을 제어해서 우리가 원하는 목적을 달성한다. 이 때 프로세스가 이 자원을 제어하는 작업을 Thread로 표현된다. 또 하나의 프로세스 안에 스레드는 여러개가 될 수 있다. (제어가 여러개) 프로세스 내 스레드들 각각 스택들을 가지고 있으며 동일한 주소 공간을 공유한다. Thread Light Weight Process(LWP) =>자원은 공유하고 제어부분만 가지고 있기 때문에 가볍다. CPU 활용의 기본 단위 구성요소 => Thread ID, Register set, Stack 장점 자원 공유(Resource sharing) => 효율성 증가(커널의 개입을 피할 수 있다) 사용자 응답성(Responsiveness) => 일부 스레드의 처리가 지연되도, 타 스레드는 작업O 경..

CS/OS 2022.01.30

프로세스(Process) 관리, 자원(Resource)의 개념

OS에서 가장 많이 쓰이는 단어라 해도 과언이 아닌 프로세스는 실행을 위해 시스템(커널)에 등록된 작업이다. 커널에 등록되는 이유는 시스템을 잘 관리하고 성능향상을 위함이다. 자원이란, 커널의 관리 하에 프로세스에게 할당/반납 되는 수동적 객체이다. H/W 자원에는 프로세서, 메모리 등이 있고, S/W 자원에는 메세지, 시그널 등이 있다. 프로세스 관리에 대해 이해하려면 프로세스 상태(Process States)에 대해 먼저 이해해야한다. 먼저 Created상태는 어떤 작업이 커널에 등록된 상태이며, 이때 PCB가 할당된다. 여기서 쓸 수 있는 메모리 공간이 있느냐에 따라 ready로 갈지 suspended ready로 갈지 결정된다. 메모리가 있어서 ready상태로 가게 되었을 때, 프로세서(CPU)외..

CS/OS 2022.01.29

Infix(중위표기법) -> Postfix(후위표기법), 그리고 스택 계산

중위표기법(Infix) 이란, 우리가 보통 연산을 할때 쓰는 방법이며, 피연산자(operand) 사이에 연산자(+,-,*,/)가 존재한다. 2 + 3 * 5 라는 식이 있을 때 '2', '3', '5' => 피연산자이고, '+', '*' 는 연산자, 그리고 이 모든것을 포함하여 토큰이라 부른다. 연사자도 두가지로 나뉜다. 이항연산자(항을 2개 요구) 2+3 에서 '+'는 이항연산자 라 할 수 있다. 단항연산자(항을 1개 요구) +6 에서 '+'는 양수임을 나타내는 연산자이며, 단항연산자이다. 후위표기법(Postfix) 이란 연산자가 피연산자 뒤에 오는 수식이다. 컴파일러가 사용하는 방식으로 스택을 사용하는 방법에 많이 등장한다. 그럼 앞의 2 + 3 * 5 수식을 Infix->postfix로 변환해보자...

운영체제의 역할˙구분

˙OS의 역할을 크게 세가지로 나눌 수 있다. User Interface(편리성) =>CUI, GUI, EUCI(특화된 UI, ex)MP3) Resource management(효율성) System management(시스템보호) OS의 구분 (동시사용자 수 / 동시실행 프로세스 수/ 작업수행방식) 동시 사용자수 Single-User System(우리가 보통 쓰는 system) (window, android) Multi-user System(Unix, Linux) 동시실행 프로세스 수 Single-tasking system => 시스템 내에 하나의 프로세스만 존재하기 때문에 간단. (ex. MS-DOS) Multi-tasking System => 동시에 여러개의 프로세스를 수행하기 때문에 OS가 복잡하다..

CS/OS 2022.01.28

Stack (LIFO, 순차적자료구조)

스택 자료구조란, 하나씩 쌓아올린 형태의 자료구조 이며, 그림과 같이 정해진 방향(한방향)으로만 쌓을 수 있다. Stack은 보통 세가지 연산 삽입(push), 삭제(pop) 그리고 지우지 않고 스택의 가장 위 값을 알려주는 (top)이 있다. 후에 나올 Queue와 반대 구조인 후입선출(Last-In-First-Out) 구조이다. 스택의 기본구조와 세가지 함수를 간단하게 구현해보았다. class Stack: def __init__(self): self.items=[] def push(self, val): self.items.append(val) def pop(self): try: return self.items.pop() except IndexError: print("스택이 비었습니다.") def to..

배열(Array) vs 리스트(list)

자료구조에서 배열이라 함은, 가장 기본적이고 순차적인 자료구조이며 매우 중요하게 다루기 때문에 대부분의 교재 및 강의에서 앞쪽에 배치되어있다. 배열과 리스트를 명확하게 구분하는것은 쉽지 않으며, 구조적 차이를 가지고 있다. Array =>연속된 메모리 공간에 할당 List => 메모리가 연속적이지 않고 다음 노드가 가르키는 주소값을 가지고 있다. C에서는 읽기 쓰기 밖에 지원이 안되는데 반면, Python의 리스트는 다양한 연산들 (append,pop,insert,remove,index)을 제공한다. 또 List는 용량을 자동조절하는 기능도 있다.(=Dynamic Array) 구현이 복잡하지만, 삽입/삭제 연산이 많을때는 리스트 자료구조를 사용하는것이 효율적이다.

운영체제(OS)의 기본

운영체제란, 컴퓨터 HW를 효율적으로 관리하여 사용자에게 서비스를 제공하는 SW 하드웨어는 크게 3가지로 나뉜다. 프로세서 (CPU, GPU) 메모리(주기억장치, 보조기억장치) 주변장치 프로세서 => 컴퓨터의 두뇌역할을 하며 중앙처리장치라고도 불린다. CPU 안에는 레지스터, 연산장치, 제어장치가 들어가있고, 레지스터는 프로세서 내부에 있는 메모리다. 프로세서가 사용할 데이터를 저장하며 컴퓨터에서 가장 빠른 메모리다. 종류로는 데이터레지스터, 주소레지스터, 프로그램카운터(다음 실행할 명령어의 주소 보관), 명령어 레지스터(현재 실행하는 명령어 보관), 누산기 등이 있다. OS는 프로세서에게 처리할 작업 할당 및 관리를 하며 프로그램 간의 프로세서 사용시간을 조절해준다. 메모리 캐시(Cache) 프로세서 ..

CS/OS 2022.01.28

자료구조란, 그리고 알고리즘

Data -> 저장공간 + 읽기/쓰기/삽입/삭제/탐색(연산) 자료구조란 => 컴퓨터에서 자료를 효율적으로 관리하고 구조화시키는 방법 ex) 변수(Variable), 배열(Array), List 등 인류최초의 알고리즘은 최대공약수(GCD)계산 알고리즘 이다. 알고리즘 수행시간: 최악의 입력에 대한 기본연산 횟수 T(n) 알고리즘 시간 복잡도를 계산할때 크게 두가지 방법이 있는데, 1. 모든 입력에 대해 기본연산 횟수를 더한 후 평균 => 정확한 방법이지만 현실적으로 불가능하다. 2. worst case 입력에 대한 기본연산 횟수를 측정한다. => 어떤 입력에 대해서도 이보다 수행시간이 크지 않음(적합) ex) T1(n) = 2n-1 , T2(n)=4n+1, T3(n)=2n^2-3n일때, T2가 T1보다 2..