커널
-운영체제의 각종 기능들 중 사용자와 실행 프로그램을 위해 매우 빈번하게 사용되는 부분
-컴퓨터가 처음 부팅될때에 주기억 장치에 적재되어시스템의 운영이 종료(Shutdown) 될 때까지 계속해서 주기억 장치에 남아 있게 되는 부분
유틸리티
-자주 사용되지 않는 운영체제 프로그램
-유틸리티 프로그램을 디스크에 두고 필요할때만 잠시 주기억 장치로 넣어 실행시킨 후 다시 디스크로 보냄으로써 주기억 장치의 공간을 확보할 수 있다.
펌웨어(Firmware)
-커널 중에서도 좀 더 빠른 실행이 요규되거나 높은 수준의 보호가 필요한 프로그램들은 아예 마이크로-프로그래밍을 하여 ROM이나 PLA와 같은 칩의 형태로 만들어 놓는것을 말한다.
프로그램은 유저모드와 커널 모드 중 하나의 모드에서만 실행되도록 하는것. 즉, 사용자와 운영체제 프로그램 간에 설정된 영역을 꼭 보호되어야 하기 때문에 사용함
polling는 CPU가 일정한 시간 간격을 두고 자원들의 상태를 주기적으로 확인하는 방식
Interrupt는 각 자원들이 능동적으로 자신의 상태변화를 CPU에게 알리는 방식 -> 자원들의 상황이 발생하면 즉시 알려 처리 받을 수 있어서 폴링보다 효과적임
계층적 구조의 설계는 계층 간에 데이터가 이동되는데 드는 부담을 동반하게 되지만 상위계층의 접근을 통해 얻게 되는 처리 시간의 절약이 이 부담을 충분히 보상한다면 매력적인 방법이 된다.
셸 정렬 : 정렬할 배열의 요소를 그룹으로 나눠 각 그룹별로 단순 삽입 정렬을 수행하고, 그 그룹을 합치면서 정렬을 반복하여 요소의 이동 횟수를 줄이는 방법
셸 정렬 과정에서 수행하는 각각의 정렬을 'h-정렬'이라고 한다.
static void shellSort(int[] a, int n){ //n은 요소개수
for(int h = n/2; h > 0; h /= 2) { //Outer Loop는 h-정렬 결정 //2
for(int i=h; i<n; i++) { //비교할 오른쪽의 인덱스값 결정 2.3.4.5.6.7 //단순 선택 정렬
int j;
int tmp = a[i]; //오른쪽 인덱스의 값 저장 2
for(j = i-h; j>=0 && a[j] > tmp; j -= h){ //tmp값이 비교대상인 a[j]보다작을경우 교환
a[j+h] = a[j];
}
a[j+h] = tmp;
}
}
}
알고리즘 처음 정렬 나왔을때 이게 뭐야 했는데 이제야 뭔가 조금이라도 보인다.. 역시 익숙해져야 하나보다. 그리고 outer loop는 무슨일을 하는지 inner loop는 무슨일을 하는지 생각하면서 봤더니 좀 더 잘보이는거같다.