스터디 22

[운영체제] Inter Process Communication

Inter-Process Communication(IPC) 프로세스 간 통신이란 프로세스가 서로 데이터를 주고받는 방법, 경로 등을 의미합니다. 커널의 디자인에 따라 마이크로 커널, 나노 커널 등 통신이 많이 일어나는 디자인의 경우 IPC 방식이 성능을 크게 좌지우지할 수 있습니다. Shared memory 운영체제의 도움을 받아 일부 영역의 메모리를 여러 프로세스가 동시에 접근할 수 있도록 권한을 받습니다. 프로세스는 공유 메모리를 읽고 쓰면서 프로세스 간 통신을 하게 됩니다. 같은 메모리를 사용하는 환경에서 작동하므로 메모리에 접근하여 값을 변경하면 그 즉시 변경된 값이 반영되어 다른 프로세스들이 접근 시 변경된 값을 얻을 수 있습니다. 처음 메모리에 여러 프로세스가 접근 권한을 부여하는 작업에서만 ..

[운영체제] 좀비 프로세스, 고아 프로세스

좀비 프로세스 자식 프로세스가 부모 프로세스보다 먼저 죽는 경우 부모 프로세스가 종료 상태를 회수하기 위해 커널이 자식 프로세스의 최소한의 정보(PID, 종료 상태 등, 리눅스의 경우 커널에서 사용하는 구조체)를 남겨둡니다. 부모 프로세스는 wait 함수를 호출하여 이 상태를 회수하면 남은 모든 정보가 제거되어 자식 프로세스는 완전히 소멸하게 됩니다. 위와 같은 진행상황에서 부모 프로세스가 wait 함수를 호출하지 않아 최소한의 정보가 메모리에 남아 있는 경우를 좀비 프로세스라고 합니다. 좀비 프로세스는 최소한의 정보만을 가지고 있어 큰 성능 저하를 야기하지 않지만, 운영체제는 한정된 PID를 가지고 있으므로 좀비 프로세스가 PID를 차지하며 다른 프로세스 실행을 방해하게 됩니다. 따라서 부모 프로세스는..

[운영체제] 프로세스 생성과 소멸

Process Creation 프로세스 생성은 부모 프로세스가 연산을 통해 자식 프로세스를 만들어냅니다. 생성된 자식 프로세스 또한 새로운 자식 프로세스를 만들 수 있으며 이를 구별하기 위해 모든 프로세스는 각자 고유의 PID를 가지게 됩니다. 이렇게 생성된 프로세스 간의 관계는 하나의 큰 트리구조가 됩니다. init 프로세스 : 리눅스, 유닉스 계열의 OS에서 최초로 실행되는 데몬 프로세스이며 PID는 항상 1입니다. 생성된 자식 프로세스는 각자 고유의 PID, 메모리, CPU 등 새 PCB가 할당되며 고유의 자원을 획득하게 됩니다. 이로 인하여 부모 프로세스의 자원 접근에 제한이 생기며 특수한 방법을 통해 공유할 수 있게 됩니다. 프로세스를 생성한 후 부모 프로세스는 다음과 같이 2가지 행동을 할 수..

[운영체제] 비전섬 스케줄링 vs 선점 스케줄링

비선점 스케줄링 할당된 프로세스를 CPU에서 강제로 내보낼 수 없으며 프로세스가 작업을 완료하거나 입출력 이벤트 등 인터럽트 발생 시에만 CPU를 반환하여 다른 프로세스가 사용할 수 있게 됩니다. 우선순위에 따라 ready queue 내에 프로세스의 위치가 달라질 수 있습니다. 장점 : 복잡한 알고리즘이 필요 없으며 context switch발생이 매우 적으므로 응답 시간이 적습니다. 단점 : 공정성이 없으며 대기시간이 높습니다. 또한 우선순위에 의해 무한정 대기가 발생할 수 있으며 시스템에 중요한 작업을 빠르게 해결하지 못할 수 있습니다. 알고리즘에 따라 인터럽트가 발생하더라도 CPU를 반환하지 않는 경우도 있으며 사용 효율이 줄어듭니다. 단순 반복 작업에 유리하여 일괄 처리 방식에 적합합니다. 선점 ..

[SQL] String, Date 처리

String : char 들의 집합으로 문자열을 의미하며 보통 varchar(N)으로 표현됩니다. Date : 날짜를 나타내는 변수로 "년/월/일" 형식입니다. Datetime : 날짜, 시간을 모두 포함하는 변수로 "년/월/일 시/분/초" 형식입니다. STRING 문자열 처리 시 보통 많이 사용하는 비교 구문으로 LIKE 가 있습니다. 주로 WHERE 절에 사용되며 문자열에 부분적으로 일치하는 패턴이 있는지 확인할 때 사용합니다. WHERE '칼럼' LIKE '조건' '%' : 해당 위치에는 어떠한 '문자열'이 와도 상관없음, 빈문자열도 가능함 '_' : 해당 위치에는 어떠한 '문자'가 와도 상관없음, 빈문자는 불가능 예를 들어 조건이 '_AA%' 인 경우 'BAA34', 'AAA'는 가능하지만 'AA..

스터디/SQL 2021.03.03

[SQL] Join

Join 데이터베이스 내에서 여러 개의 테이블의 레코드들을 키를 기준으로 조합하여 하나의 열로 나타내는 구문입니다. A JOIN B ON A.ID = B.ID : 테이블 A, B에서 ID가 같은 레코드끼리 묶어 데이터를 조합합니다. 집합으로 표현할 때 기본 JOIN인 INNER JOIN 경우 A 위치에 해당하는 결과를 냅니다. Join의 종류 INNER JOIN : A LEFT OUTER JOIN : B + A RIGHT OUTER JOIN : A + C LEFT, RIGHT OUTER JOIN 결과 A에 해당하는 부분은 모든 필드가 채워지지만 B, C에 해당하는 부분은 채워 넣을 데이터가 없으므로 NULL 값으로 채워지게 됩니다. 이외에 두 테이블에서 만들 수 있는 모든 경우의 수, 곱집합을 나타내는 ..

스터디/SQL 2021.03.02

[SQL] NULL 처리

NULL SQL 에서 NULL이란 데이터베이스 내의 데이터값이 존재하지 않는다는 것을 의미합니다. 문자열에서 빈 문자열인 "", 숫자 0과 다른 의미를 가집니다. 테이블에 INSERT 시 NULL을 통해 빈칸으로 둘 수 있으며 JOIN의 경우 LEFT, RIGHT JOIN시 연결되는 값이 없다면 NULL이 됩니다. NULL 처리 IS NULL, IS NOT NULL을 통해 해당 공간이 NULL인지 확인할 수 있습니다. 또한 IFNULL을 통해 NULL인 경우 어떠한 처리를 할 수 있습니다. SELECT NAME FROM TABLE WHERE NAME IS NOT NULL : 이름이 NULL이 아닌 레코드를 출력 SELECT IFNULL(NAME, 'NO NAME') FROM TABLE : 이름을 출력하되..

스터디/SQL 2021.02.28

[SQL] GROUP BY

GROUP BY SELECT 절과 함께 쓰이는 데이터를 원하는 그룹으로 나눌 때 사용합니다. DISTINCT "칼럼명"과 같이 결과를 하나로 묶어주는 역할을 합니다. 나눌 그룹의 칼럼명을 GROUP BY "칼럼명" 형식으로 사용하면 됩니다. HAVING GROUP BY에서 조건을 걸어주기 위한 절이며 WHERE 절과 다르게 집계함수와 함께 사용 가능합니다. 위의 쿼리문은 테이블에서 나이가 20 이상인 사람들의 수를 나이 별로 나타내게 됩니다. 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 고양이와 개는 몇 마리 있을까 SELECT ANIMAL_TYP..

스터디/SQL 2021.02.28

[SQL] 집계 함수

집계 함수 SELECT 절에서 사용 가능한 정보를 모아서 계산하는 함수를 말합니다. "함수명(칼럼명)" 형태로 사용하며 함수 이름이 명확하여 간단하게 사용할 수 있습니다. SELECT COUNT(*) : 테이블의 모든 ROW의 개수를 추출합니다. SELECT COUNT(NAME) : 테이블의 칼럼 중 NAME에 해당하는 ROW의 개수를 추출합니다. 이때 주의해야 할 점은 NULL은 포함되지 않으므로 COUNT(*)의 결과와 다를 수 있습니다. COUNT : ROW의 총개수를 계산합니다. SUM : ROW의 합계를 계산합니다. 이때 칼럼이 덧셈이 불가능한 STRING 등의 타입인 경우 0이 나옵니다. AVG : 평균을 계산합니다. SUM과 마찬가지로 계산이 불가능한 경우 0이 나옵니다. MAX, MIN :..

스터디/SQL 2021.02.26

[SQL] SELECT

SELECT 하나 이상의 테이블에서 특정 데이터를 추출하는 SQL의 기본 언어입니다. FROM 와 같이 사용해야 하며, WHERE, GROUP BY, HAVING, ORDER BY와 함께 사용하며 다음과 같은 의미를 가집니다. SELECT : 테이블에서 항목, 즉 특정 열을 선택합니다. SELECT * : 모든 열을 가져옵니다. DISTINCT를 이용해서 중복을 빼고 추출할 수 있습니다. FROM : 어떤 테이블에서 해당 내용을 가져올지 선택합니다. WHERE : 테이블의 레코드, 즉 열에 조건을 거는 선택 절이며 =, !=,

스터디/SQL 2021.02.26