본문 바로가기

Computer Science

(6)
[운영체제] CPU 스케쥴링(Scheduling) 오늘은 CPU스케쥴링에 대해 알아보자 하나의 프로세스만 CPU를 독점하고 있으면 어떻게 될까? 지금 우리가 여러개의 프로그램을 동시에 사용하는 것은 불가할 것이다.(사실 어느 시점의 CPU는 하나의 프로세스가 사용하고 있지만 매우 빨리 바뀌기 때문에 우리는 동시에 사용한다고 느끼는 것이다.) 그렇다면 여러 프로세스들이 CPU를 번갈아가면서 사용해야 하는데 어떤 기준을 가지고 CPU를 할당 받게 될까? 지금부터 그 기준을 알아보자 먼저 CPU 스케쥴링에는 선점(Preemptive)와 비선점(Non-Preemptive)가 있다. 단어만 들어서는 무슨 뜻인지 모르겠다. 선점이란? 선점 방식이란 예를 들어 A프로세스가 실행되고 있는데 특정한 기준에 의해 우선순위가 더 높은 B프로세스가 CPU를 요청하게 되면 A..
[운영체제] 인터럽트(Interrupt)와 컨텍스트 스위칭(Context Switching) 지난번에 정리한 멀티 프로세스 혹은 멀티 스레드 환경을 생각해보자 A라는 프로그램이 CPU를 할당받아 명령을 수행하고 있다. 하지만 어떠한 이유에서 어떠한 루틴의 실행을 목적으로 CPU를 할당받아야 한다고 해보자 그렇다면 어떻게 CPU에 대한 사용권을 얻어와야 할까? 이때 사용되는 것이 인터럽트(Interrupt)라는 것이다. 인터럽트가 발생하게 되면 A는 현재 수행중인 명령을 멈춘다. 그리고 어떠한 루틴을 수행한 다음 다시 A로 돌아와 명령을 수행하게 된다. 여기서 의문이 생긴다. 명령을 멈췄으면 다시 돌아왔을때 처음부터 실행해야 되나? 이를 위해 멈추기 전에 현재 실행상태(명령의 위치)를 저장해 놓는다. 이렇게 저장되는 자료의 구조를 PCB(Process Control Block)이라고 한다. 그렇다..
[운영체제] 프로세스(Process)와 스레드(Thread) 오늘은 프로세스와 스레드에 대해 알아보자 Process란? 간단히 말해서 실행되는 프로그램이다. 일반적으로 CPU에 할당되는 단위라고 하는데 이는 매우 위험하다. 그 이유는 최근 리눅스에서는 스레드 단위로 CPU에 할당하는 방식으로 사용하기 있기 때문이다. 따라서 조심하자!! Thread란? 이것도 간단히 말해 프로세스 내부에서의 작업단위 혹은 실행단위라고 말할 수 있다. 정의에 대해서는 간단하게 살펴보고 차이점을 알아보자 Process vs Thread 가장 큰 차이점은 메모리 공유에 있다. 프로세스들은 각각이 독립적인 존재로 서로 메모리를 공유하지 않는다. 하지만 스레드는 서로 메모리영역을 공유한다. 여기서 알아두어야 할게 있다. 스레드는 모든 메모리 영역을 공유하는 것이 아니고 Heap/Data/C..
[자료구조] Heap이란? 오늘은 Heap 이라는 자료구조에 대해 알아보자 Heap이란? 힙이란 완전 이진트리의 일종으로 반정렬 상태에 있다! 우선순위가 높은 노드가 위쪽에 있는 형태이고 이를 통해 최대값과 최소값을 빠르게 찾아낼 수 있도록 설계된 구조이다 그러면 Heap은 어디에 쓰이는가? 바로 우선순위 큐를 구현할 때 쓰인다. 사실상 힙이라는 구조는 우선순위 큐를 위해 존재한다고 봐도 무방하다! 우선순위 큐 구현에도 여러가지 방법(Array,LinkedList,Heap)이 존재하는데 Heap으로 구현하는 것이 가장 효율적이기 때문에 보통 우선순위큐는 heap으로 구현되어있다. 힙은 어떤 종류가 있을까? 힙은 최대힙과 최소힙 두가지 종류가 있다. 그림으로 보면 왼쪽이 최대힙으로 큰 값이 우선순위가 높아 제일 위에 있다. 오른쪽은..
[자료구조] Stack과 Queue 오늘은 선형 자료구조인 Stack과 Queue에 대해 알아보자 Stack 이란? 입력과 출력이 한 곳으로만 이루어지는 자료구조의 형태이다. LIFO정책을 따르고 있다.(Last In First Out) 따라서 나중에 들어온 것이 먼저 나간다. 뷔페의 접시가 쌓여있는 것을 생각하면 쉽다!! 그렇다면 Stack은 언제 사용될까? 1. 함수의 콜스택에 사용된다. 2. 문자열을 역순 출력할때에도 하나하나씩 넣고 빼면 역순으로 출력된다. 3. 후위 표기법을 연산할때 ex) 234*+ = 14 5. 브라우저 방문기록 6. 실행 취소(undo) Stack은 배열과 달리 index로 접근할 수 없다. 또한 삽입과 삭제는 O(1)의 시간 복잡도 이다.(값을 넣고 빼기만 하면 되므로) 하지만 탐색시에는 O(n)이 걸린다...
[자료구조] Array와 List CS스터디를 시작하면서 한동안 못썼던 블로그를 자주 써볼려고 합니다!! 예전 개발자들이 개발을 시작하면서 데이터를 다룰때 하나의 데이터만 다루는 것은 아니겠죠? 여러가지 데이터가 모인 집합을 형성하게 되는데 먼저 Array라는 녀석부터 살펴봅시다. Array란? 순차적으로 데이터를 저장하는 형태로 물리적주소도 순차적으로 저장된다.(크기를 미리 지정해줘야 한다.) index라는 것이 존재해 빠르게 값을 찾아낼때 유용하다.(원하는 데이터 한번에 접근가능O(1)) 하지만 삽입과 삭제에는 취약하다. (해당 위치에 접근하고O(1), shift O(n)해주는 작업까지 걸려 O(n)이 걸린다.) 예를 들어 중간녀석을 삭제하려면 배열의 연속성이 깨져 이후 뒤에것들을 모두 앞으로 땡겨줘야 한다. 그렇다면 어떻게 저런 시..

반응형