본문 바로가기

개인 공부89

쉽게 배우는 운영체제 : 가상 메모리 관리 (9장) ■ 요구 페이징 · Process가 요청할 때 메모리로 가져오는 것 → 메모리를 효율적으로 관리, 응답 속도 향상의 이유로 process 일부만 가져옴 (나머지는 필요할 때) ■ 가상 메모리 · 물리 메모리 + 스왑 영역 (Harddisk or 메모리 관리자의 영역) → 스왑-in : 메모리로 data를 가져오는 것 ↔ 스왑-out ■ Flag Bit (Access-Modifed-Valid-Read-Write-Excute bit) · 접근 비트(참조 비트) : 페이지의 사용 여부 · 변경 비트 : 페이지의 변경 여부 · 유효 비트(현재 비트) : 요구하는 페이지의 위치를 표시 → 0 : 메모리에 위치, frame num 저장 / 1 : 스왑 영역에 위치, page의 주소 저장 · 읽기, 쓰기, 실행 비트.. 2021. 10. 29.
쉽게 배우는 운영체제 : 컴퓨터의 구조와 성능 향상 (2장) ■ 컴퓨터의 기본 구성 · 필수장치 : CPU, 메인 메모리 · 주변장치 : 입력장치, 출력장치, 저장장치 ■ 하드웨어의 구성 · CPU : 명령어를 해석하고 실행 · 메인 메모리 : 프로그램, 데이터를 저장 / byte 단위, 주소로 구분 · 저장장치 : 메모리에 비해 속도↓, 가격↓, 용량↑ / 데이터 영구 저장 · 메인 보드 : 다양한 부품을 연결하는 판 / 버스로 연결 ■ 폰 노이만 구조 · 프로그램을 메모리에 위치시킴, 버스로 장치들이 연결된 구조 → 메모리가 유일한 작업 공간, 모든 프로그램이 메모리에 올라와야 실행 가능 ■ 관련 용어 · 클록(clock) : CPU의 속도와 관련 / 클록에 맞춰 CPU가 작업 · 헤르츠(Hz) : 클록 틱이 발생하는 속도 단위 · 시스템 버스(FSB) : 메.. 2021. 10. 29.
쉽게 배우는 운영체제 : 운영체제의 개요 (1장) ■ 정의 · 편리한 인터페이스를 제공하고 시스템의 자원을 효율적으로 관리하는 프로그램 ■ 운영체제의 필요성 · OS가 없어도 작동은 가능하다 (ex. 에니악) · 컴퓨터의 성능 향상, 효율적인 자원 관리, 인터페이스를 제공하기 때문에! ■ 역할 1. 자원 관리 : 자원을 응용 프로그램에게 분배·회수한다. 2. 자원 보호 : 비정상적인 작업(다른 영역 침범 등)을 방지한다. 3. 하드웨어 인터페이스 제공 : 드라이버를 자동 설치함으로 HW 상관없이 사용 가능케 한다. 4. 사용자 인터페이스 제공 : 사용자가 운영체제를 편리하게 사용할 수 있게 한다. ■ 목표 1. 효율성 : 같은 자원으로 많은 작업을, 같은 양의 작업을 더 작은 자원으로 가능하게 한다. 2. 안정성 3. 확장성 : 다양한 자원의 추가·제거.. 2021. 9. 26.
[알고리즘] 유클리드 알고리즘(최대공약수, 최소공배수 구하기) 일반적으로 최대공약수(Greatest Common Factor)와 최소공배수(Lowest Common Multiple)를 구할 때 소인수분해를 해서 구한다. 하지만 프로그래밍을 통해서 구할 때는 특정한 알고리즘 없이 직접적으로 구하기 까다롭다. 여기서 유클리드 알고리즘은 최대공약수를 구하는 특별한 알고리즘이다! ※ 유클리드 알고리즘이란? 주어진 두 수 사이에 최대공약수(GCD)를 구하는 알고리즘 유클리드 알고리즘은 "두 수 A, B가 주어졌을 때(단 A > B) A를 B로 나눈 나머지 r에 대해서 GCD(A, B) = GCD(B, r)이고, 여기서 나머지 r이 0이면 B가 두 수의 최대공약수이다!"라는 원리를 이용한 알고리즘이다. 알고리즘을 구현하는 방법은 재귀를 이용하는 방법과 반복문을 이용하는 방법 .. 2021. 7. 3.
[알고리즘] 가장 긴 증가하는 부분수열(LIS) ※ 가장 긴 증가하는 부분 수열(Longest Increasing Subsequence)이란? 부분 수열 중에서 각 원소가 이전 원소보다 큰 부분 수열 중에서 가장 긴 것! 예를 들어서, { 2, 5, 1, 7, 4, 8, 3} 이라는 배열이 있을 때, 증가하는 부분 수열은 { 2, 5 }, { 1, 4, 3} 등이 있지만 LIS는 { 2, 5, 7, 8 } 이다! 알고리즘은 시간복잡도에 따라서 2가지가 있다. ( O(N^2)과 O(N log N) ) 첫 번째 방법은 다이나믹 프로그래밍을 통한 방법이다. 시간 복잡도는 O(N^2) code#1 1 2 3 4 5 6 7 for (int i = 0; i arr[i]; } dp[0] = arr[0]; int idx = 0; for (int i = 1; i 2021. 6. 23.