SQL을 다루기에 앞서 다음과 같은 테이블을 사용한다. sailors 테이블 reserves 테이블 Boats 테이블 기본 문법 SQL 기본 문법의 형태는 위와 같다.이때 실행 순서는 FROM - WHERE - SELECT 순서이다.From 절로 릴레이션 리스트를 가져오고, 가져온 릴레이션에서 WHERE 절로 조건에 맞는 행을 고른 뒤, 그 안에서 보고 싶은 컬럼을 select 하면 된다.만약 DISTINCT 키워드가 있다면 select 결과에 대해 중복값을 제거한다. FROM 절에 들어가는 relation-list 에 여러개의 릴레이션을 넣으면 각 릴레이션에 대해 cross product 한 결과를 만들어낸다.WHERE 절은 관계 대수에서 selection 에 해당하는 부분이며, qualificati..
인터렉티브 시스템은 사용자의 요청에 얼마나 빠르게 응답하는지를 중점적으로 보는 시스템이다.따라서 인터렉티브 시스템은 선점형 스케줄링 알고리즘을 사용하며 response time 을 낮추는 것을 목표로 하였다. 이번 글에서는 인터렉티브 시스템의 스케줄링 알고리즘들을 정리해보자. Round Robin Scheduling라운드 로빈 스케줄링은 이름 그대로 빙글빙글 돌아가면서 프로세스를 실행하는 알고리즘이다.배치 시스템 스케줄링에서 봤었던 FCFS 스케줄링처럼 앞에 것을 실행하고 뒤로 보내는 것을 반복하면서 마치 원형큐를 사용하듯 쓰는 방법인데, 여기에 선점형 스케줄링의 속성이 추가되었다고 보면 된다. (a) 그림에 있는 프로세스들이 runnable 프로세스 ( = ready 상태에 있는 프로세스, run..
지난 글에서 정리한 것처럼, 배치 시스템은 프로세스 스위칭을 최소화하고 성능을 높이는 것을 목표로 한다.배치 시스템에서 사용하는 다양한 스케줄링 알고리즘을 정리해보자. FCFS (First-Come-First-Served)선입 선처리 스케줄링 또는 FCFS 스케줄링라고 부른다.이름 그대로 CPU 사용을 요청한 순서대로 할당해주는 방식의 알고리즘이다. 이를 위해서 하나의 큐를 사용하며, 현재 실행중인 프로세스가 Blocked 상태로 가면 큐의 맨 앞에 있는 프로세스를 running 상태로 올린다. 만약 blocked 상태에 있던 프로세스가 ready상태가 되면, 큐의 맨 뒤에 해당 프로세스를 넣는다. 이 스케줄링 알고리즘은 비선점 스케줄링 알고리즘이다.큐에 들어온 순서대로 순차적으로 실행만 하고, 실행하..
Scheduling과거 배치 시스템과 TimeSharing 방식의 컴퓨터가 있었을 때는 CPU가 매우 희귀한 자원이었다.그래서 이 비싸고 귀중한 CPU 자원을 최대한 많은 프로세스를 처리하는데 효율적으로 쓰기 위해서 여러가지 고민이 필요했다. 시간이 지나면서 CPU 성능이 증가하고 개인용 컴퓨터 시대가 온 뒤에는 과거만큼 CPU를 효율적으로 사용하기 위한 스케줄링 알고리즘의 고민 필요성이 낮아졌지만, 그럼에도 불구하고 서버 컴퓨터와 같은 고성능 컴퓨터에서는 스케줄링 알고리즘에 대한 고민이 필요하다.(보통 서버컴퓨터는 접속하는 클라이언트마다 프로세스를 생성하기 때문이다.) 그리고 프로세스는 계속 상태가 변하면서 번갈아 실행이 되는데,이렇게 실행하는 프로세스를 교체하는 것을 가리켜 프로세스 스위칭 또는 컨텍..
NFANondeterministic Finite Accepter DFA와 마찬가지로 유한한 저장공간을 가지며, 답을 yes / no 로만 내는 기계를 말한다.다만 Nondeterministic 이므로, 현재 상태에서 특정 인풋이 주어졌을 때, 다른 상태로 넘어갈 수 있는 길이 여러개가 있거나 없을 수 있는 기계를 말한다. 구성요소 자체는 DFA와 동일하므로 DFA와 유사하게 정의된다. 이때 𝜹 에 들어갈 수 있는 transition function는 DFA와 다르다.델타에는 DFA와 마찬가지로 𝜹(Qx, a) = Qy 로 표기할 수 있다.다만 이때 Qy가 하나의 상태가 아니라 여러 개의 상태 집합일 수 있으며, 입력 심볼에도 빈 문자열 람다가 들어올 수 있다. 위 정의에서 말하는 2^Q 는 pow..
그림과 같이 음식과 포크가 주어져있다.이때 각 음식 앞에는 철학자들이 있고, 철학자들은 생각을 하거나 음식을 먹는다. 철학자들은 다음과 같은 순서로 식사를 진행한다. 1. 생각을 하다가 왼쪽 포크가 사용가능하면 집는다.2. 생각을 하다가 오른쪽 포크가 사용가능하면 집는다.3. 두 포크를 모두 집었다면 일정시간 식사를 한다.4. 식사를 마치고 오른쪽 포크를 내려둔다.5. 왼쪽 포크를 내려둔다.6. 1~5반복 이를 코드로 구현하면 아래와 같다. 이때 만약 모든 철학자가 동시에 식사를 시작하면 모두 동시에 왼쪽 포크를 집어들고 오른쪽 포크를 서로가 영원히 기다리므로 식사를 할 수 없게 된다. 이렇게 서로가 이미 점유한 자원에 서로 의존하여 모든 프로세스가 동작을 멈추는 상황을 '데드락(교착 상태)' 이라고..
Message Passing지난 글까지 정리한 프로세스 동기화는 모두 하나의 컴퓨터에서 같은 메모리와 CPU를 공유하는 서로 다른 프로세스 사이의 동작을 이야기했다. 이번에는 네트워크로 연결된 서로 다른 컴퓨터 상에서 돌아가는 서로 다른 프로세스 사이의 동작에 대해 이야기해본다. 서로 다른 프로세스 사이에 메세지를 주고받으려면 네트워크를 통해서 메세지를 전송하고 수신할 수 있어야 한다.메세지를 전송할 때는 send(), 메세지를 수신할 때는 receive() 라는 시스템 콜을 사용한다.send() 는 목적지로 메세지를 전송하는 것이니 간단한데, receive() 의 경우, 호출 했을 때 자신에게 온 메세지가 없다면 blocked 상태로 빠지거나(Sleep) 에러 코드를 return 할 수 있다. (뒤에서..
다음과 같이 Sailors, Boats, Reserves 테이블이 정의되어 있다. Sailors (sid, sname, rating, age)Boats (bid, bname, color)Reserves (sid, bid, day) 구체적인 데이터 표기는 생략하였다.이제 이 테이블에 대해 관계대수 문제를 풀어보자. 1. bid = 103 인 보트를 예약한 선원들의 이름 구하기 예약 테이블에서 bid = 103 인 예약만 가져온 뒤, 선원 테이블과 자연조인하였다.그러면 두 테이블의 모든 공통필드를 기준으로 동등 조인을 걸고, sid 가 동일한 경우만 추려낸다.그러면 103번 보트를 예약한 선원들만 남게 되므로, 여기에서 sname 을 프로젝션하여 조회하면 된다. 강의록에서는 이렇게 복잡하게 푼 경우도 제..
질의언어 (Query Language) 는 데이터베이스로부터 데이터를 가져오고 조작하는 언어이다.질의언어는 모든 알고리즘을 표현할 수 없는, Turing Complete 하지 않은 언어이다. 쿼리는 relation instance 에 적용되며, 쿼리의 적용결과 역시 relation instance 이다.또한 관계 대수를 정의할 때 각 릴레이션(테이블)의 필드는 위치 기반 또는 이름 기반으로 표현할 수 있는데, SQL에서는 두 방법 모두 사용가능하며, 상황에 맞게 적절하게 사용하면 된다. 관계 대수를 정리하기 위해 위 그림과 같은 테이블을 준비하였다.S1, S2 는 같은 스키마를 가진 Sailors 테이블이고, R1 테이블은 Reserves 테이블이다.선원과 선원이 예약한 보트에 대한 정보를 볼 수 있..
Sleep and Wakeup프로세스를 동기화하여 서로 다른 프로세스가 동시에 임계 구역에 존재하지 못하도록 막는 알고리즘을 '상호 배제' 라고 하였다.상호 배제를 달성하는 간단한 알고리즘들을 정리하였는데, 이 알고리즘들은 모두 busy waiting 알고리즘으로 계속해서 공유 변수를 체크하면서 자신이 임게 구역에 들어갈 수 있는지 직접 확인해야했다. busy waiting 방식은 CPU 시간을 낭비하고, 우선순위 스케줄링 방식에서 우순선위 역전 문제를 일으키기도 한다.그래서 그 대안으로 나온 방법이 Sleep and Wakeup 이다. sleep, wakeup 은 모두 시스템 콜이다.sleep 시스템 콜을 호출하면 다른 프로세스가 wakeup 시스템 콜을 호출할 때까지 호출한 프로세스를 blocked ..