posted by changhozz 2015. 4. 10. 16:40

-인터럽트란?

작동 중인 컴퓨터에 예기치 않은 문제가 발생한 경우 CPU(중앙처리장치:central processing unit) 자체가 하드웨어적으로 상태를 체크하여 변화에 대응하는 것을 말한다. 인터럽트가 발생하면 그 순간 운영체계 내의 제어프로그램에 있는 인터럽트 처리 루틴(routine)이 작동하여 응급사태를 해결하고 인터럽트가 생기기 이전의 상태로 복귀시킨다. 인터럽트 처리 루틴이 작동하지 않는다면, 인터럽트가 완료 될 때 까지 사용자 프로그램은 멈춰있어야 한다.

 

간단한 인터럽트 처리 순서.

1. 장치 제어기나 다른 시스템 하드웨어가 인터럽트를 발생시킴

2. 인터럽트가 발생 되었다고 처리기에 시그널을 보냄.

3. 처리기는 우선 시그널을 무시하고 현재 명령어의 실행을 완료.

4. 하던일을 마친 후 인터럽트에게 확인 신호를 보냄

5. 처리기가 PSW(Program Status Word)와  PC를 제어 스택에 저장함.

6. 처리기는 인터럽트에 해당하는 새로운 PC값을 적재함.

이때 소프트웨어에서는 원래 수행중이던 프로세스의 나머지 상태 정보를 저장.

7. 인터럽트 처리

8. 프로세스의 상태 정보를 복구

9. 이전 PSW와 PC를 복구.

 

인터럽트 처리 방법

1.순차적 인터럽트 처리

-하나의 인터럽트가 처리중에는 다른 인터럽트를 불능화 (우선순위 고려하지 않음.)

2.중첩 인터럽트 처리방법

- 인터럽트 간의 우선순위를 정하고 높은 우선순위 인터럽트가 낮은 우선순위 인터럽트를 인터럽트할 수 있도록 허용

 

 

 

 

 

 

1장 용어.

*레지스터 - CPU에 들어 있는 소규모 데이터 기억장치(누산기도 여기에 포함.)

 

*누산기 - CPU에서 더하기,빼기,곱하기,나누기 등의 연산을 한 결과 등을 일시적으로 저장하는

              레지스터.
*PSW - 명령의 실행순서를 제어하여 실행되고 있는 프로그램에 관계하는 시스템의 상태를 유지하는데 사용되는 레지스터를 말한다

*PC - Program Counter로 다음 번에 수행될 명령어의 주소를 가지고 있는 레지스터.
범용 레지스터 - 중앙 처리 장치(CPU) 내에 있는 레지스터들 중에는 특정 기능을 맡고 있는 레지스터들과 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인 등의 여러 가지 목적으로 사용될 수 있는 범용 레지스터가 있다.


*다중 프로그래밍
- 처리기는 실행 가능한 하나 이상의 프로그램을 보유하고 프로그램들이 수행 순서를 바꿔가면서

처리되는 개념을 말함
- 프로그램이 실행되는 순서는 프로그램의 상대적인 우선 순위와 입출력 대기 여부에 따라 달라짐
- 인터럽트 처리 루틴이 실행을 마치면, 인터럽트가 발생한 당시에 수행 중이던 프로그램으로 제어가

돌아가지 않을 수 있음  그 대신 보다 높은 우선순위를 가지고 대기 중인 다른 프로그램으로 제어가 전달


*캐시 메모리 -
주기억 장치에 읽어들인 명령이나 프로그램들로 채워지는 버퍼 형태의 고속 기억 장치.
주기억 장치와 중앙 처리 장치(central processing unit)와의 사이에 설치되어 있는 고속 버퍼메모리다.
캐시 메모리(cache memory) 또는 로컬 메모리(local memory)라고도 한다.
기억 용량(memory capacity)은 적지만 주기억 장치에 비해 고속이며 액세스할 수 있는 장점이 있다.
따라서 중앙 처리 장치가 명령이 필요하게 되면, 맨 먼저 액세스하는 것은 주기억 장치가 아니라

캐시 메모리인 셈이다.  자주 액세스하는 데이터나 프로그램 명령을 반복해서 검색하지 않고도

즉각 사용할 수 있도록 저장해두는 영역이다.

 

*참조지역성 - 프로세스들은 기억장치내의 정보를 균일하게 엑세스 하는것이 아니라 시공간적으로

참조를 많이 했었던 것을 또 참조 하는 경향이 있다.
공간(spatial) 지역성 : 특성 클러스터의 기억 장소들에 대해 참조가 집중적으로 이루어지는 경향
시간(temporal) 지역성 : 최근 사용되었던 기억 장소들이 집중적으로 액세스되는 경향

posted by changhozz 2013. 1. 18. 11:48

이번엔 SQL기법중 GROUP BY기법과 내부함수에 대하여 알아보자.

1.GROUP BY
GROUP BY란 특정 칼럼을 기준으로 같은 값을 가지는 행들을 그룹별로 모아 자료를 가져오는 것이다.
쉽게말해서, 중복된 여러개의 값들 중 대표선수 한명만 뽑겠다는 뜻으로 보면 될 것이다.

예시를 보면서 설명하도록 해보겠다.

위와 같이 사람들이 좋아하는 축구선수 목록 테이블인 tb_soccer_player가 있다고 할때,
방금 설명한 내용대로 축구선수의 name을 GROUP BY 해보도록 하겠다.


Query :  SELECT * FROM tb_soccer_player GROUP BY name;

result :

결과를 보게되면, 원래 테이블은 8개의 행이였는데 5개의 행으로 줄어든 것을 볼 수 있다.
이유는 C.Ronaldo, Kaka, Messi는 값이 2개씩 존재했기 때문에, 그룹화 하여 단 한개의 데이터로 취급한 것 이다.

그렇다면 축구선수의 num으로 GROUP BY를 해봤을 경우를 예상해보자.

Query :  SELECT * FROM tb_soccer_player GROUP BY num;

result : 

예상대로 num중 7,9,10만 출력되는 것을 볼 수 있다.
8개의 행들 중 num 칼럼은 모두 7,9,10들 뿐이었기 때문이다.
그런데 여기서 7번에는 ji-sung도 있고, 10번에는 Zidane도있는데 왜 C.Ronaldo와 Messi가 선택되었을까? 
우리가 따로 정렬에 대한 정보를 입력하지 않았다면 GROUP BY는 내부적으로 시컨스를 기준으로 정렬(sorting)이 이루어진다.  따라서 id값이 작은 순서대로(먼저 들어온 데이터 순) 정렬이 되었기 때문에,
뒤늦게 들어온 ji-sing과 Zidane은 밀려버린 것 이다.


2.HAVING

지금까지는 조건이 없는 GROUP BY문들이었다.
평소 어떤 쿼리를 작성할때 조건을 달고싶었다면 WHERE절을 이용하였는데, GROUP BY에서의 조건은
WHERE로 처리하지 않고 HAVING절을 사용한다. 

그럼 HAVING절을 이용하여 GROUP BY 해보도록 하겠다.
먼저 조건을 주기위해 tb_soccer_player테이블에 선수 몸값 칼럼을 추가해보겠다.



여기서,
축구선수들 중 몸 값이 400이상인 선수들의 목록을 그룹화 하여 보고싶다면,


Query : SELECT * FROM tb_soccer_player GROUP BY name HAVING price > 400; 

result : 


이러한 결과가 나오게 되는 것 이다.


이번엔 조금더 실질적으로 사용되는 예들을 들어보겠다. 
 
집계함수를 사용하는 것인데, 우선 집계함수에는 어떠한 것들이 있는지 알아보도록 하겠다.

3. 집계함수

집계란 이미 계산 된 것들을 모아서 계산하는 것을 말한다. 즉, 이미 계산된 결과를 어떤 기준으로
그룹화 하는 함수를 집계함수라고한다.

그렇다면 어떤 집계함수들이 있는지 확인해보자.


집계함수 

의미 

count (필드명)

null값이 아닌 레코드의 개수 

sum(필드명) 

필드명의 값들의 합계 

avg(필드명) 

필드명의 값들의 평균 

max(필드명)  필드명의 값들 중 최대값 
 min(필드명)

필드명의 값들 중 최소값 

count(*)   테이블에 속하는 레코드의 개수


합수를 사용한 예를들기위해 새로운 테이블 tb_employee를 만들었다.
현재 tb_employee 칼럼으로는 dept(부서), position(직책), headcnt(인원수), salary(급여)가 존재한다.


ex.1) 각 부서당 몇개의 직책이 있는지 알고싶다.

Query : SELECT dept,count(position) position_cnt FROM tb_employee GROUP BY dept;

result : 


ex.2) 각 부서당 전체사원의 수를 알고싶다.

Query : SELECT dept, sum(headcnt) from tb_employee GROUP BY dept;

result :  


ex.3) 직책별로 평균 급여를 알고싶다.

Query : SELECT position, CEILING(avg(salary)) salary_avg from tb_employee GROUP BY position;

result : 


(여기서 CEILING()은 내장함수로 소수점을 버려준다. )


앞으로 공부를 하면서 더 나은 예제가 있다면 또 다시 정리해보자.



'MySQL' 카테고리의 다른 글

JOIN  (0) 2013.01.11
posted by changhozz 2013. 1. 11. 03:21

SQL의 기법중 JOIN기법에 대하여 알아보도록하자.


참고, SQL이란?

Structed Query Language의 약자로써 해석하자면 '구조화된 질의어'란 뜻이다.

즉, 데이터베이스에서 데이터를 조회, 입력, 수정, 삭제, 저장하는데 사용되는 질의 언어이다.

구조화된 언어라는 말은 일정한 틀이나 패턴이 있다는 뜻이다.

일정한 틀과 패턴에 맞게 조건들을 나열하면 SQL은 원하는 결과를 가져다 준다.

패턴에 맞게 조건들을 선언한다는 의미에서 SQL을 선언적(declarative)언어라고도 한다.



*JOIN*

-JOIN이란 기법은 여러 테이블에 흩어져 있는 정보 중에서 사용자가 필요한 정보만 가져온뒤

가상의 테이블을 만들어 결과를 보여주는 기법이다.

-JOIN에는 오라클에서 사용하는 JOIN문과 모든 제품들에서서 공통적으로 사용 가능한 

표준(ANSI) JOIN 방법이 있다.


우리는 MySQL을 사용하므로 표준JOIN방법을 이용하면되겠다!.

그럼 우선 어떤  종류의 JOIN연산자가 있는지 알아보도록하자.




JOIN 종류   설명 
 내부조인(INNER JOIN)   조건을 사용해서 두 테이블의 레코드를 결합한다.
 외부조인(OUTER JOIN)  내부조인과 비슷한데 일치하지 않는 열까지 반환하며 그 열은 NULL로 반환한다.
  동등 조인(EQUI JOIN)   내부조인이다. 두 테이블 사이의 같은 행들을 반환한다.
 비동등 조인(NON-EQUI JOIN)  내부조인이다. 두 테이블 사이의 같지 않은 행들을 반환한다.
 자연 조인(NATURAL JOIN)  'ON' 절이 없는 내부조인. 같은 열 이름을 가진 두 테이블을 조인할때만 작동
 크로스 조인(CROSS JOIN)  한 테이블의 모든 행과 다른 테이블의 모든 행이 연결되는 모든 경우를 반환.
 콤마 조인(COMMA JOIN)  콤마가 CROSS JOIN 키워드 대신 사용된다는 점을 제외하면 크로스 조인과 같다.
 셀프 조인(SELF JOIN)  자기 자신을 조인한다.


그럼 이제 실제로 테이블을 생성하여 직접 사용해보자.
오늘의 테스트를 위한 테이블 4 개를 생성해보겠다. 






지금부터 생성한 4개의 테이블을 이용하여 알아보도록 하자.

    


1. 내부 조인(INNER JOIN)

 - 조건을 사용하여 두 테이블의 레코드를 결합한다.

- 동등 조인, 비동등 조인, 자연 조인 등이 있다.


ex) Select somecolumns From table1 Inner Join table2 ON somecondition; 


1) 동등 조인(EQUI JOIN)

- 두 테이블 사이의 같은 행들을 반환한다.


ex) 각 boy가 어떤 toy를 가지고 있는지 조사한다. (매핑 확인)

SELECT tb_boys.boy, tb_toys.toy FROM tb_boys INNER JOIN tb_toys 
ON tb_boys.toy_id =  tb_toys.toy_id;



 2) 비동등 조인(NON-EQUI JOIN)

-두 테이블 사이의 같지 않은 모든 행들을 반환한다.


ex) SELECT tb_boys.boy, tb_toys.toy FROM tb_boys INNER JOIN tb_toys ON tb_boys.toy_id <> tb_toys.toy_id ORDER BY tb_boys.boy;


참고:여기서 <> ㅡ> 이것은 같지 않음을 나타냄.




3) 자연 조인(NATURAL JOIN)


- 두 테이블에 같은 이름의 열이 있을때만 동작한다.

- ON이 필요없다.

ex) SELECT tb_boys.boy, tb_toys.toy FROM tb_boys NATURAL JOIN tb_toys;




2. 외부 조인(OUTER JOIN)


- 내부 조인과 유사하며 일치하는 것이 없을 경우 NULL로 표시한다.

- 왼쪽 테이블은 FROM 바로 다음에 나오는 테이블이고, JOIN 뒤에 나오는 테이블이 오른쪽 테이블이다.

- 왼쪽 외부 조인(LEFT OUTER JOIN)과 오른쪽 외부 조인(RIGHT OUTER JOIN)이 있다.

- 왼쪽 외부 조인을 사용할 경우 왼쪽 테이블을 오른쪽 테이블에 비교한다. 오른쪽 외부 조인도 그 반대로 동작한다. 


유용한 예) girls가 어느 toys를 가지고 있는지 알아보도록 쿼리를 작성한다.


i) 왼쪽 테이블을 오른쪽 테이블에 비교하는 방법 

SELECT g.girl, t.toy FROM tb_girls g LEFT OUTER JOIN tb_toys t ON g.toy_id = t.toy_id;




 ii) 반대로 했을때

SELECT g.girl, t.toy FROM tb_toys t LEFT OUTER JOIN tb_girls g ON g.toy_id = t.toy_id;



3. 크로스 조인(CROSS JOIN)

- 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지워 반환한다.


ex) SELECT t.toy, b.boy FROM tb_toys AS t CROSS JOIN tb_boys AS b;



4. 셀프 조인(SELF JOIN)

- 자기 자신을 조인한다.

- 자기 자신을 하나씩 비교하기 위해 사용한다.

- 하나의 테이블로 같은 정보를 가진 테이블이 두 개 있는 것처럼 쿼리를 보낼 수 있다.


예) 각 사람의 이름(name)과 그 사람을 담당하는 보스(boss)의 이름을 가져온다. 

SELECT c1.name, c2.name AS boss FROM tb_company_info c1 INNER JOIN tb_company_info c2 ON c1.boss_id = c2.id;








'MySQL' 카테고리의 다른 글

GROUP BY  (4) 2013.01.18