주기억장치는 현재 실행 중인 프로그램과 이 프로그램이 필요로 하는 데이터를 일시적으로 저장하는 장치다. 운영체제는 이 주기억장치에 필요한 데이터를 할당하고, 프로그램이 종료되면 회수해야 한다. 보통 주기억장치를 여러 영역으로 나누어서 프로세스의 크기에 따라 할당하는 방식을 사용한다. 그중에서도 대부분 시스템에서 사용되는 것은 가상 메모리 방식이다. 가상 메모리(Virtual Memory)란 실행될 프로그램이 주기억장치의 용량보다 크거나 그전에 이미 주기억장치의 용량이 다 꽉 차서 공간이 부족할 때 프로그램이 제 때 실행되지 않을 수 있다. 이를 해결하기 위해 프로그램 실행에 당장 필요한 부분만 주기억장치에 저장하고 나머지는 보조기억장치에 저장하여 작동하게 하는 방식이다. 이처럼 실행에 당장 필요한 부분과..
대부분의 프로그램은 보조기억장치에 저장되어 있다가 실행 명령을 받으면 주기억장치로 올라가 CPU에 의해 실행된다. 프로세스(Process)란 주기억장치에 올라간 프로그램(실행 중인 프로그램)을 뜻한다. 프로그램이 실행되기 위해선 보조기억장치가 아닌 주기억장치에 저장되어 있어야 하며, 프로세스에는 프로그램 코드 및 다양한 실행 정보가 담겨 있다. 프로세스는 주기억장치에 프로세스 제어 블록(PCB)라고 하는 공간에 프로세스에 대한 정보를 저장한다. 이는 임의의 프로세스가 생성되면 자동으로 생성되며, 종료시 같이 사라진다. 프로세스 상태 : 프로세스의 현재 상태(준비/대기/실행)를 나타낸다. 주소 레지스터 값 : CPU의 주소 레지스터에 저장된 값 스케줄링 정보 : 다음에 실행될 프로세스를 결정하는데 필요한 ..
운영체제는 pc나 모바일에서 없어선 안될 중요한 요소로 여겨지고 있다. windows를 만든 MS는 현재까지도 운영체제 인프라의 핵심이라고 할 수 있는데 이 운영체제는 과연 무엇이길래 이렇게 까지 중요하게 여겨질까? 하는 의문이 들 수 있다. 하지만 이는 컴퓨터가 어떻게 작동하는지 조금이라도 안다면 운영체제의 역할이 얼마나 중요한지 알 수 있다. 컴퓨터의 중앙처리장치(CPU)는 주기억장치(RAM/ROM)와 데이터를 주고 받으며 제어하고 연산을 수행한다. 이 때 각각의 데이터를 주기억장치의 부분부분에 저장하고 주소를 지정한다. 뿐만 아니라 보조기억장치(HDD/SDD 등), 입출력장치 등과도 연결되어 있는 컴퓨터의 수많은 데이터의 흐름을 사용자가 직접 관리하기엔 매우 복잡하고 접근성이 떨어진다. 우리가 쉽게..
# 원소 삽입 def insertAt(self, pos, newNode): if pos self.nodeCount + 1: return False if pos == 1: newNode.next = self.head self.head = newNode else: if pos == self.nodeCount + 1: # 삽입위치가 맨끝일 경우 바로 tail로 이동 prev = self.tail else: prev = self.getAt(pos - 1) newNode.next = prev.next prev.next = newNode if pos == self.nodeCount + 1: self.tail = newNode self.nodeCount += 1 return True Linke..
데이터의 원소들의 순서를 지어 늘어놓는다는 점은 Linear array와 비슷한 면이 있으나 약간의 차이가 있다. Linear array : "번호가 붙여진 칸에 원소들을 채워넣는" 방식 Linked list : "원소 하나하나를 줄줄이 실로 엮어넣는" 방식 Linked list는 노드(Data+Link)로 구성되어 있으며, 각 노드의 Link는 다음 노드의 Data를 가리킨다. Linked List의 장점 원소를 삽입하거나 삭제하기가 쉽다 (소요시간 짧음) 이러한 연산이 자주 일어나는 운영체제 내부에서 많이 이용된다. Linked List의 단점 Linked list의 Data와 Link가 모두 메모리에 저장되므로 메모리 요구량이 array보다 더 크다. 원소 탐색에 있어서 해당 인덱스를 알면 바로 찾..
방법(method)이란 어떤 목적을 달성하기 위해 해야 할 작업을 명확하게 지시한 것입니다. 그리고 방법 중에서도 작업의 횟수가 항상 유한한 것을 특별히 알고리즘(algorithm)이라고 부릅니다. 55p 알고리즘의 복잡도는 크게 시간 복잡도(time complexity)와 공간 복잡도(space complexity)로 나뉜다. 알고리즘의 복잡도란 이 알고리즘이 얼마나 복잡한가를 나타내는 것이 아니라 데이터의 개수(문제의 크기), N에 따라 얼마나 많은 시간(공간 : 메모리 용량)을 소요하는가를 나타내는 척도이다. Big-O 표기법은 최악의 경우 (worst-case)에 대하여 표기하며, 최악의 경우라도 이정도의 성능은 보장한다는 뜻이다. (따라서 O(N)인 알고리즘이라고 하더라도 소요시간이 O(N)보다..