WIFT | 2020. 12. 02
[SQL]
조건 분기 / 집합 연산 / 윈도우 함수/ 갱신
조건 분기
✔️ CASE식
단순 CASE식 | 검색 CASE식
CASE WHEN [평가식] THEN [식]
WHEN [평가식] THEN [식]
WHEN [평가식] THEN [식]
(생략)
ELSE [식]
END
SQL의 조건 분기는 특정한 값(상수)을 리턴함.
CASE식은 SELECT, WHERE, GROUP BY, HAVING, ORDER BY 구와 같이 식 어디에나 적을 수 있으므로 다양한 기법으로 활용 가능!
SQL의 집합 연산
UNION
, UNION ALL
=> 합집합
INTERSECT
=> 교집합
EXCEPT
=> 차집합
윈도우 함수
'집약 기능이 없는 GROUP BY 구'
PARTITION BY
SELECT [칼럼명]
집약함수 OVER (PARTITION BY [칼럼명])
FROM [테이블명]
RANK
; 숫자가 같으면 같은 순위를 표시
DENSE_RANK
; 건너뛰는 작업 없이 순위를 표시
SELECT [칼럼명],
...
RANK() OVER(ORDER BY [칼럼명] DESC) AS [별칭]
FROM [테이블명]
ROW_NUMBER
트랜잭션과 갱신
SQL은 데이터 검색을 중심으로 수행하기 위한 언어이므로, 데이터 갱신은 부가적인 기능
✔️ SQL의 갱신 작업
- 삽입(insert)
- 제거(delete)
- 갱신(update)
UNION을 사용한 쓸데없이 긴 표현
UNION을 사용한 조건 분기는 WHERE 구만 조금씩 다른 여러 개의 SELECT 구문을 합쳐 복수의 조건에 일치하는 하나의 결과 집합을 얻고 싶을 때 사용함.
BUT, 성능적인 측면에서 큰 단점을 갖고 있음.
=> 테이블에 접근하는 횟수가 많으져 I/O 비용이 증가
예외적으로 UNION을 사용하는 경우
i) 머지(merge) 대상이 되는 SELECT 구문들에서 사용하는 테이블이 다른 경우 -> 여러 개의 테이블에서 검색한 결과를 merge
ii) 인덱스(index)를 사용하는 경우
[OS]
프로세스 관리
프로세스
프로세스(process): 실행 중인 프로그램(program in execution)
프로세스의 문맥(context): 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보
프로세스의 문맥은 그 프로세스의 주소 공간(코드+데이터+스택)을 비롯해 레지스터에 어떤 값을 갖고 있었는지, 시스템 콜 등을 통해 거널에서 수행한 일의 상태, 그 프로세스에 관해 커널이 관리하고 있는 각종 정보 등을 포함
1) 하드웨어 문맥: CPU의 수행 상태를 나타내는 것으로 프로그램 카운터값과 각종 레지스터에 저장하고 있는 값
2) 프로세스의 주소공간: 코드, 데이터, 스택으로 구성되는 독자적인 주소공간
3) 커널상의 문맥: PCB, 커널 스택
프로세스의 상태
- 실행(running)
프로세스가 CPU를 보유하고 기계어 명령을 실행하고 있는 상태 - 준비(ready)
프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당받지 못한 상태 - 봉쇄(blocked, wait, sleep)
CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태 - 시작(new)
프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만 아직 메모리 획득을 승인받지 못한 상태 - 완료(terminated)
프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태 - 중지(suspended, stopped)
외부적인 이유로 프로세스의 수행이 정지된 상태
'중지준비(suspended ready)'와 '중지봉쇄(suspended block)'로 세분화
프로세스의 상태는 시간의 흐름에 따라 변함!
프로세스 제어블록(Process Control Block): 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조
✔️ PCB의 구성 요소
- 프로세스의 상태
- 프로그램 카운터의 값
- CPU 레지스터의 값
- CPU 스케줄링 정보
- 메모리 관리 정보
- 자원 사용 정보
- 입출력 상태 정보
문맥교환(context): 하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정
문맥교환 중 원래 CPU를 보유하고 있던 프로세스는 프로그램 카운터값 등 프로세스의 문맥을 자신의 PCB에 저장, 새롭게 CPU를 할당받을 프로세스는 예전에 저장했던 자신의 문맥을 PCB로부터 실제 하드웨어로 복원시키는 과정을 거침.
프로세스를 스케줄링하기 위한 큐
준비 큐(ready queue)
장치 큐(device queue)
작업 큐(job queue)
스케줄러
스케줄러(scheduler): 어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드
✔️ 스케줄러의 종류
-
장기 스케줄러(=작업 스케줄러)
어떤 프로세스를 준비 큐에 진입시킬지 결정하는 역할
degree of multiprogramming을 제어함.
프로세스에게 메모리를 할당하는 문제에 관여함.
현대의 시분할 시스템에서 사용되는 운영체제는 일반적으로 장기 스케줄러를 두지 않음. -
단기 스케줄러(=CPU 스케줄러)
준비 상태의 프로세스 중에서 어떤 프로세스를 다음번에 실행 상태로 만들 것인지 결정함.
밀리초 정도의 시간 단위로 아주 빈번히 호출되므로 수행 속도가 빨라야 함. -
중기 스케줄러(=Swapper)
너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우, 이를 해결하기 위해 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위해 추가된 스케줄러
메모리에 올라와 있는 프로세스 중 일부를 골라 이들로부터 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑 영역에 저장 =>스왑 아웃(swap out)
프로세스의 생성
시스템이 부팅된 이후 최초의 프로세스는 운영체제가 직접 생성하지만, 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성함.
부모 프로세스: 프로세스를 생성한 프로세스
자식 프로세스: 새롭게 생성된 프로세스
프로세스의 세계에서는 자식이 먼저 죽고, 이에 대한 처리를 부모 프로세스가 담당함.
i) 부모와 자식이 공존하며 수행되는 경우
ii) 자식이 종료될 때까지 부모가 기다리는 경우
fork() 시스템 콜: 프로세스 ID를 제외한 모든 정보(운영체제 커널 내의 정보와 주소공간의 정보)를 그대로 복사
프로세스간의 협력
운영체제는 프로세스 간의 협력 메커니즘을 제공하여 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있게 함.
IPC(Inter-Process Communication): 하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스 간에 발생하는 통신
IPC는 프로세스들 간의 '통신'과 '동기화'를 이루기 위한 메커니즘
✔️ 메시지 전달 방식
- 직접 통신
통신하려는 프로세스의 이름을 명시적으로 표시 - 간접 통신
메시지를 메일 박스(mail box) 또는 포트(port)로부터 전달받음.
✔️ 공유 메모리 방식
프로세스들이 주소 공간의 일부를 공유
Ref
[강의] KOCW 이화여자대학교 반효경 교수 <운영체제> 강의
[도서] 반효경, ⌜운영체제와 정보기술의 원리⌟ 개정판, 이화여자대학교출판문화원, 2020
[도서] 미크/윤인성, ⌜SQL 레벨업⌟, 한빛미디어, 2016
Author And Source
이 문제에 관하여(WIFT | 2020. 12. 02), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@solseye/TIL-2020.-12.-02저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)