컴퓨터과학(CS) (48) 썸네일형 리스트형 인터럽트(가로채기) 현대 운영체제는 OS가 상주한다. 예) 마우스로 프로그램 실행 1. 마우스를 움직이면 전기신호가 발생 2. CPU는 하던 일을 중지하고 OS안의 해당 상황 서비스 루틴을 동작한다. (마우스 커서가 이동) 3. 마우스 더블 클릭시 인터럽트 서비스 (HDD안의 프로그램을 메모리에 올린다.) 그 후 모니터에 해당 프로그램 초기 화면이 나옴 마우스처럼 키보드도 인터럽트 서비스가 존재한다. OS안의 코드는 인터럽트가 걸릴 때 동작을 적어둔 것이다. 마우스, 키보드의 전기 신호(인터럽트 발생) -> OS가 서비스 수행 -> 모든 작업이 끝나면 CPU는 다시 대기 상태로 돌아감 마우스와 키보드같은 H/W 뿐만 아니라, SW도 인터럽트가 존재한다. 인터럽트는 하드웨어가 일반적이지만 swi처럼 sw도 인터럽트를 걸 수 .. 데이터베이스 시스템 데이터베이스 시스템 데이터베이스에 데이터를 저장하고 이를 관리하여 조직에 필요한 정보 생성 데이터베이스의 구조 스키마: 데이터베이스에 저장되는 데이터 구조와 제약 조건을 정의 인스턴스: 스키마에 따라 실제로 저장된 값 3단계 데이터베이스 구조 외부단계: 개별 사용자 관점(외부 스키마) 개념단계: 조직 전체의 관점(개념 스키마) 내부단계: 물리적인 저장장치의 관점(내부 스키마) 각 단계별로 다른 추상화 제공(내부 -> 외부 추상화 레벨이 올라간다) 외부단계 사용자 관점에서 이해하고 표현 데이터베이스 하나에 외부 스카마가 여러개 존재 외부스키마 외부단계에서 데이터 베이스를 정의하고 논리적 구조로 사용자마다 다르다. 서브 스키마라고도 함 개념단계 조직 전체의 관점에서 이해하고 표현 데이터베이스 하나에 개념 스.. 고등 운영체제 다중 프로세서(병렬 시스템) 만든 이유 Performance(더 많은 계산) 비용 측면(하나의 비싼 CPU보다 n개의 싼 CPU가 더 저렴하다.) reliability(신뢰성): 하나가 고장나도 다른 CPU가 동작한다. 싱글과 멀티의 OS는 다르다. 그렇기에 전용 OS(리눅스도 지원)가 존재한다. 분산 시스템(Distributed System) 메모리가 떨어져있고 LAN으로 연결되어 있다. ex) 일기예보 - 지역별로 나눠서 가능, 경계지역의 경우 서로 계산한 것을 주고 받음 만든 이유는 다중 프로세서와 동일하다.(성능, 비용, 신뢰성) 실시간 시스템(Real-time System) 어떤 시간(데드라인)내에 반드시 끝내야 하는 시스템 ex) 네비게이션, 미사일 격추, 공장 자동화, 항공 우주 단순히 빠른.. 데이터베이스 관리 시스템 파일 시스템: 데이터를 파일로 관리하기 위해 응용프로그램마다 데이터를 별도의 파일로 관리 파일 시스템의 문제점 같은 내용의 데이터가 여러 파일에 저장(무결성 유지 X) 응용프로그램이 데이터 파일에 종속적(구조가 변경되면 프로그램도 재설계) 데이터 파일에 대한 동시 공유, 보안, 회복 기능이 부족 응용프로그램 개발이 쉽지 않다.(종속적이기에 파일의 구조 등 기본적 데이터 관리 기능을 다시 파악해야 한다.) 주요 문제점 데이터 중복성 -> 저장공간 낭비, 무결성과 일관성 유지가 어렵다 데이터 종속성 -> 파일의 구조를 변경하면 응용프로그램도 함께 변경 DBMS(데이터베이스 관리 시스템) 데이터를 DB에 통합하여 관리 주요 기능 정의 기능: DB의 구조를 정의하거나 수정할 수 있다. 조작 기능: 데이터를 삽입.. 운영체제의 역사 1940년대 컴퓨터 하드웨어의 발전이 운영체제의 발전으로 연결되었다. 카드리더가 구멍이 있는 종이 카드를 읽어 메모리에 적재하고 그것을 프로세서가 처리하여 프린터로 출력한다. 컴파일->링크->로딩 순서를 오퍼레이터가 직접 해준 것이므로 운영체제가 없었다. Batch Processing System(일괄처리) : 최초의 OS 오퍼레이터가 하는 일련의 과정을 프로그램으로 작성하여 메모리에 올린 것으로 그것을 Resident Monitor라고 한다. 메모리에 OS 하나, User Program 하나씩만 올릴 수 있다. Multi Programming System(다중 처리) : 1960년대 일괄처리의 문제점 : I/O을 처리하는 동안 CPU가 IDLE 하다. 즉, 이 시간동안 CPU가 놀게 된다. 위의 문제의.. 데이터베이스의 기본 개념 데이터 vs 정보 데이터는 가공되지 않고 측정되거나 관찰된 값이다. 정보는 그러한 데이터를 처리한 결과물이다. 이 둘의 차이는 의미 부여 여부 및 의사소통에 활용 가능한가이다. 정보처리는 데이터에서 정보를 추출하는 것이다. 그러한 정보처리를 하는 시스템이 정보 시스템이다. 데이터 베이스는 특정 조직의 여러 사용자가 공유하여 사용하도록 통합해 저장한 운영 데이터 집합이다. 데이터 베이스의 정의 : 통합, 공유, 저장, 운영 통합 데이터 : 최소한의 중복만을 허용 공유 데이터 : 여러 사용자가 함께 소유 저장 데이터 : 컴퓨터가 접근할 수 있는 매체에 저장 운영 데이터 : 조직의 주요 기능을 수행하기 위해 지속적으로 유지 데이터 베이스의 특징 : 실시간 접근, 계속 변화, 동시 공유, 내용기반 참조 실시간 .. 운영체제란? 운영체제가 없는 PC의 전원을 넣는다면 전혀 제어가 불가능 하다. 또한 hwp, ppt 등을 운영체제가 하드에서 메모리로 올려준다. 운영체제는 하드웨어를 관리하여 성능(Performance)을 높이고 사용자에게 편의성을 제공한다. 같은 하드웨어일지라도 운영체제에 의해 성능이 다르고 누구나 몇 번만 사용하면 사용법을 숙지할 수 있도록 편리하다. RAM : 휘발성 ROM : 비휘발성 PC의 전원을 키면 먼저 ROM의 명령을 읽는다 -> POST(Power on self test), 부트로더(Boot loader) 먼저 테스트를 한 뒤, 하드 디스크 속 OS를 메모리(RAM의 영역)로 가져온다. 일반적인 프로그램은 프로그램 종료 시 메모리에서 내려가지만, 운영체제는 메모리에 상주한다.(PC가 꺼질 때까지) 운.. 이진 탐색(Binary Search) 목표 이진 탐색 정의 설명 과정 설명 구현 시간복잡도와 공간복잡도 계산 정의 순차탐색과 다르게 특정 원소의 존재 여부를 파악하는데에 O(logn) 시간에 해결하는 알고리즘이다. 과정 1. 배열의 중앙값을 찾는다. 2. 중앙값보다 크면 오른쪽 부분 배열을 탐색하고 작으면 왼쪽 부분 배열을 탐색한다. 3. 이 과정을 반복하면서 값을 찾고 start가 end보다 커지면 값을 찾지 못한 것이다. 구현 1. 전통적인 이진 탐색 구현 방법 #include #include using namespace std; int arr[100000]; void search(int num, int start, int end) { int middle = (start+end)/2; while(start >m; for(int i=0; .. 카운팅 정렬(Counting Sort) 목표 카운팅 정렬 정의 설명 과정 설명 구현 시간복잡도와 공간복잡도 계산 정의 여타 다른 정렬 알고리즘이 비교 기반이라면 카운팅 정렬은 그와 다르게 갯수를 세어서 정렬한다. 말 그대로 카운팅을 통해 정렬을 하는 것이다. 과정 1. n개의 배열를 차례대로 돌면서 해당 값을 인덱스로 하는 배열에 1을 더한다. 2. 갯수가 저장된 배열을 체크한다. 3. 체크한 배열의 값이 0이 아니면 0이 될 때까지 출력한다. 구현 #include using namespace std; int arr[10001]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; for(int i=0; i> num; arr[num]++; } for(int i=1.. 병합 정렬(MergeSort) 목표 병합 정렬 정의 설명 과정 설명 구현 시간복잡도와 공간복잡도 계산 정의 병합 정렬은 비교 기반 정렬 알고리즘으로 분할 정복 알고리즘의 하나이다. 일반적인 기법을 사용하면 안정 정렬이다. 과정설명 1. 리스트의 길이가 0과 1은 이미 정렬되어 있는 경우이며 그 외의 경우에는 2. 리스트를 절반으로 쪼갠다. 3. 나누어진 리스트를 정렬한다. 4. 두 리스트를 하나의 리스트로 병합한다. 구현 #include using namespace std; int arr[1000000], temp[1000000]; void sort(int start, int middle, int end) // 정렬 { int a = start, b = middle+1, num = start; while(a arr[i]; merge(.. 이전 1 2 3 4 5 다음 목록 더보기