본문 바로가기

CS110

[운영체제] 인터럽트(Interrupt) 인터럽트(Interrupt) - 비동기식 인터럽트 - 하드웨어 인터럽트 - 정해진 기준없이 예측불가하게 이벤트 발생 - I/O 인터럽트, 키보드 인터럽트, 네트워크 인터럽트 등 예외(Exception) - 동기식 인터럽트 - 명령어 실행 후 그 결과(Instruction fault)로인해 발생하는 경우 - divde by zero, page fault, overflow 등 트랩(Trap) - 실행중인 프로그램 내에 테스트를 위한 특별한 조건을 걸어 놓는 것 - 각 상황에 맞는 handle 함수 또는 서비스 루틴을 매핑 2020. 6. 20.
[운영체제] 캐시 메모리(Cache Memory) 캐시 메모리 - 속도가 빠른 저장 장치와 느린 저장 장치 사이에 속도 차이에 따른 병목현상을 줄이기 위한 범용 메로리 - 지역성을 이용해 CPU가 어떤 데이터를 원할 것인가를 어느 정도 에측해 캐시 메모리에 데이터를 저장 지역성(Locality) - 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성 1) 시간지역성(Temporal Locality) - 최근에 참조된 주소의 내용이 재참조될 가능성이 높은 특성 2) 공간지역성(Spatial Locality) - 최근에 참조된 주소의 인접한 데이터가 참조될 가능성이 높은 특성 캐시 라인(Cache Line) - 캐시에 저장된 데이터를 빠르게 추출하기 위해 특정 자료구조를 사용해 묶음으로 저장하는 것 - 캐시에 저장하고 있는 데이터는 데이터의 메모리 주소등.. 2020. 6. 20.
[운영체제] 가상메모리(Virtual Memory) 가상메모리 - 프로세스 전체가 메모리 내에 적재되지 않더라도 실행이 가능하도록 하는 기법 - 가상 메모리 기법을 통해 물리 메모리 크기에 제약받지 않고 더 많은 프로그램을 동시에 실행할 수 있음 - 프로세스에서 실제로 사용되지 않는 영역을 제외하고 메모리에 적재함으로싸, 메모리에 적재하는 용량을 줄임 가상메모리의 크기 - 가상메모리의 크기는 이론상 CPU bit, 버스의 대역폭에 따르게 됨 - CPU 비트 수로 표현할 수 있는 주소값의 범위 - 32 bit CPU에서 가상메모리의 크기는 2^32 - 1(4GB) - 64 bit CPU에서 가상메모리의 크기는 2^64 - 1(16,000,000 TB) 요구 페이징(Demand Paging) - 가상 메모리에서 프로그램 실행을 위해 초기에 필요한 것만 적재하.. 2020. 6. 20.
[운영체제]메모리 관리 전략(Memory Management Strategy) 메모리 관리 전략 - 메모리 용량이 증가함에 따라 프로그램의 크기 또한 계속 증가하고 있기 떄문에 메모리는 언제나 부족 - 제한된 물리 메모리의 효율적인 사용과 메모리 참조 방식을 제공하기 위한 전략 효과적인 메모리 사용 1) 메모리 낭비 방지 (1) 동적 적재(Dynamic Loading) - 프로그램 실행에 반드시 필요한 루틴과 데이터만 적재하는 기법 - 모든 루틴(ex. 오류처리)과 데이터(ex. 배열)는 항상 사용하지 않고, 실행 시 필요하다면 그때 해당 부분을 메모리에 적재 (2) 동적 연결(Dynamic Linking) - 라이브러리 루틴연결을 컴파일 시점에 하는 것이 아닌 실행 시점까지 미루는 기법 (3) 스와핑(Swapping) - CPU에서 실행중이지 않는 프로세스는 저장장치의 Swap .. 2020. 6. 20.
[운영체제] 스케줄러(Scheduler) 스케줄러(Scheduler) - 한정적인 메모리를 여러 프로세스가 효율적으로 사용할 수 있도록 다음 실행 시간에 실행할 수 있는 프로세스 중에 하나를 선택하는 역할 1) Scheduling Queues - 프로세스를 관리하는 큐 (1) Job Queue(batch queue) - 시스템 안의 모든 프로세스의 집합 (2) Ready Queue - ready 상태의 메인메모리 안에 상주하는 모든 프로세스의 집합 (3) Device Queue - I/O 장치 사용을 대기하는 프로세스들의 집합 2) 스케줄러 종류 (1) 장기 스케줄러(Long-term scheduler) / 잡 스케줄러(Job scheduler) - degree of multiprogramming 제어 - 디스크와 메모리 사이의 스케줄링 담당 .. 2020. 6. 18.
[운영체제] 교착상태(Deadlock) 교착상태(Deadlock) - 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상 1) 교착상태의 4가지 조건 (1) 비선점(Nonpreemptive) - 한 프로세스가 다른 프로세스의 자원을 강제로 빼앗을 수 없음 (2) 순환대기(Circular Wait) - 두 개 이상의 프로세스가 자원 접근을 기다릴 때, 그 관계가 순환적인 구조 (3) 점유대기(Busy and Wait) - 공유 자원에 대한 접근 권한을 가지고 있는 프로세스가 다른 자원에 대한 접근 권한을 요구 (4) 상호배제(Mutual Exclusion) - 한 번에 한 프로세스만 공유 자원에 접근 가능하며, 공유 자원에 대한 접근 권한이 제한 2) 교착상태 처리 방법 (1).. 2020. 6. 18.
[운영체제] 동기화 프로세스 동기화 - 하나의 자원을 한 시점에 하나의 프로세스만이 접근 스레드 동기화 - 하나의 코드 블록 또는 메소드를 한 시점에 하나의 스레드만이 접근 경쟁상황(Race Condition) - 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황 임계 영역(Critical Section) - 멀티 스레드 환경에서 여러 개의 스레드가 동시에 접근 시 문제가 발생하는 코드 영역 1) 임계 역역 문제 해결조건 (1) 상호 배제(Mutual Exclusion) - 한 스레드가 임계 영역에서 실행 중이면 다른 스레드는 접근 불가능 (2) 진행(Progress) - 임계 영역에서 실행중인 스레드가 없다면, 임계 영역으로 진입하려는 스레드 중 하나는 유한한 시간 내에 진입할 수 있어야 함 (3) 한정된 대기(Bou.. 2020. 6. 18.
[운영체제]멀티프로세스와 멀티스레드 멀티 프로세스와 멀티스레드 1) 멀티 프로세스 다수의 프로세스를 실행하는 것 2) 멀티 스레드 하나의 프로세스를 다수의 실행 단위로 나누어 실행하는 것 3) 멀티 프로세스와 멀티 스레드의 차이 (1) 멀티 프로세스 (+) 하나의 프로세스가 비정상적으로 종료되더라도 다른 프로세스가 영향을 받지 않음 (+) 멀티 스레드처럼 동기화 작업이 별도로 필요하지 않음 (-) 자원 소모, 메모리 낭비, 문맥 교환으로 인한 비효율성 (-) IPC 통신으로 인한 비용 (2) 멀티 스레드 (+) 문맥 교환에 소비되는 시간을 줄일 수 있음(스택 영역만 문맥교환이 일어남) (+) 자원을 공유하기 때문에 메모리 낭비를 줄임 (-) 동기화 작업이 필요 (-) 하나의 스레드가 비정상적으로 종료 시, 다른 스레드도 종료될 수 있음 4.. 2020. 6. 18.
[운영체제] 프로세스와 스레드 프로그램 - 저장 장치에 저장된 실행할 수 있는 파일 프로세스 1) 프로세스 - 메모리에 올라와 실행 중인 프로그램의 인스턴스 - 코드, 데이터, 스택, 힙 영역으로 구성 - 프로세스 간 통신을 위해 IPC(Inter-Process Communication) 사용(파일, 소켓, 파이프 등) 2) 프로세스 제어 블록(PCB, Process Control Block) - 프로세스에 대한 정보를 저장하고 있는 자료구조 - 프로세스 생성과 동시에 고유한 PCB 생성 - 프로세스가 CPU를 할당받아 작업하다가 Context Swithing 발생 시 실행 중인 프로세스의 정보를 PCB에 저장하고, 다시 CPU를 할당받았을 때, PCB에 저장된 정보를 기반으로 이전에 멈췄던 시점부터 다시 작업을 수행 - 프로세스 식.. 2020. 6. 18.
[데이터베이스] 데이터베이스 성능 개선 데이터베이스 성능 개선과 관련된 질문을 받았지만 할 수 있었던 대답은 분산 기법(클러스터링, 레플리케이션, 샤딩)밖에 생각나지 않았다. 가장 기본적으로 인덱스나 옵티마이저도 생각했어야했는데 특정 기술에 대한 정의를 알기전에 그 기술에 왜 사용되는지 먼저 알아야하는 자세가 필요하다. 데이터베이스 인덱스(Database Index) 지정한 column을 기준으로 메모리 영역에 일종의 색인을 생성하는 것. 데이터베이스의 레코드가 늘어날수록 table full scan의 속도는 느려진다. 인덱스를 사용하면 빠른 탐색이 가능하다. 하지만 인덱스는 키 값을 기준으로 정렬된 상태를 유지하기 때문에 검색속도는 빨라질 수 있지만, 삽입, 삭제, 갱신을 느려진다. 1) 인덱스 구조 (1) B-Tree 인덱스 - B-Tre.. 2020. 6. 14.
[알고리즘] 유니온파인드(Union-Find) 알고리즘 알고리즘에 대한 구현 방법 뿐만 아니라 시간복잡도까지 알 수 있도록 공부하자! Union-Find 알고리즘이란? Union-Find 알고리즘은 그래프 알고리즘 중 하나로 서로소 집합, 상호배타적 집합(Disjoint-Set)알고리즘이라고도 불린다. 여러 노드가 존재할 때, 선택한 두 노드가 서로 같은 그래프에 속하는지 판별하는 알고리즘이다. Union-Find 과정 1) Init for(int i = 0; i < parent.length; i++) parent[i] = i; 초기화. 최초 노드는 자기자신을 루트노드로 가진다. 1) Find(x) // x가 속한 그래프의 루트 노드를 반환 static int find(int x) { // x의 루트노드가 x일 경우. 즉, x와 연결된 노드가 없을 경우. i.. 2020. 6. 14.
트러블 슈팅(Trouble shooting) 트러블 슈팅이란 문제가 발생했을 때 원인을 규명하고 해결하는 작업을 의미한다. 트러블 슈팅은 문제 정의, 사실 수집, 원인 추론, 조치 방안 작성과 구현 단계로 나뉘어 진다. 전공 프로젝트에서 발생했던 문제를 바탕으로 예를 들어보자 1. 문제 정의 시스템에서 발생하는 현상을 파악하고 문제를 명확히 표현, 규정하는 단계 이미지 자동 측정 모듈을 웹 애플리케이션과 합쳤을 때, 모듈에서 사용한 텐서플로우의 메소드를 인식하지 못하는 문제가 발생했다 2. 사실 수집 정의된 문제에 대해 대략의 점검 항목과 내용을 결정하고, 자료 수집하는 단계 메소드를 하나 하나 고칠 때마다 다음 메소드를 인식하지 못하고 결국에는 텐서플로우 메소드 전체를 인식하지 못한다 3. 원인 추론 수집된 자료를 바탕으로 문제의 원인을 추론하는.. 2020. 5. 24.