전체 글 (174) 썸네일형 리스트형 [ 운영체제 ] 메모리 관리 1 - 페이징(Paging) 드디어 대망의 메모리 관리 파트다. '메모리 계층 구조'부터 '주소 공간'까지 아직 안 읽었다면 읽고 오는 것을 추천한다. 앞의 내용을 숙지하고 있어야 이번 챕터를 잘 이해할 수 있기 때문이다. 이번 글은 논리적 주소를 물리적 주소로 mapping 할때 연속적으로 mapping 하면 어떤 문제가 발생하는지, 이에 대한 해결책은 무엇인지 알아본다. 해결책은 제목에 떡하니 나와 있다. 연속 할당의 문제점 - 외부 단편화(External Fragmentation)바로 이전 글에서 논리적 주소를 설명하면서 '연속 할당'의 개념을 다뤘었다. 다시 한 번 상기시켜보자. 연속 할당이란 한 프로세스의 모든 논리적 주소에 동일한 base register를 더해주는 것이다. 이는 MMU에 의해 이뤄지며 주소는 Execu.. [ 백준 1890 ] 점프 (C++) https://www.acmicpc.net/problem/1890 1890번: 점프 첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장 www.acmicpc.net 두 개의 배열을 사용해서 풀었다. 1. int m[100][100] 이동배열 문제의 입력값을 저장한다. map[1][2]는 1행, 2열에서 오른쪽, 아래로 이동 가능한 칸 수다. 2. long visit[100][100] 도달 가능 경로 배열 visit[3][4]의 값은 3행 4열로 도달할 수 있는 경우의 수를 뜻한다. 만약에 값이 0이면 아직 한 번도 방문하지 않았다는 뜻이다. 그냥 .. [ 백준 15486 ] 퇴사 2 (C++) https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 다이나믹 프로그래밍 문제다. Dp는 먼저 점화식을 세운 뒤에 코드를 짜는게 편하다. 개인적으로 Dp 문제를 풀 때 Dp 값이 무엇을 뜻하는지 아는 게 정말 중요하다고 생각한다. 이 문제의 경우 dp[i]는 무엇을 뜻할까? dp[i] 란 i일동안 누적한 최대 이익을 말한다. 예를 들어 dp[13] = 64 이라면 13일까지의 최대 이익은 64라는 뜻이다. 초기 dp 값.. [ 운영체제 ] 주소 공간(Address Space), 물리적 주소(Physical Address), 논리적 주소(Logical Address), 주소 바인딩(Address Binding) 저번 글에서는 컴파일, 런타임, 로딩을 이해하는 시간을 가졌다. 이 세 용어를 확실하게 이해했다면 이번 글은 술술 읽으면서 넘길 수 있을 것이다. '메모리 계층 구조'부터 이 글까지는 '메모리 관리'파트를 이해하기 위한 단계라고 생각하면 된다. 우리가 앞으로 배울 내용을 한 문장으로 요약하면 아래와 같다. 참고로 메모리는 캐시부터 메인 메모리까지를 통칭하는데 이 글과 '메모리 파트'에서는 주로 메인 메모리로 쓰인다. 한정된 메모리 공간을 어떻게 하면 효율적으로 관리할 수 있을까? CPU가 직접적으로 접근할 수 있는 저장 장치는 메모리다. 그러나 메모리 공간은 한정적이다. 여러 개의 프로그램을 실행해야 하는 운영체제는 협소한 메모리 공간을 최대한 효율적으로 관리해서 CPU가 필요한 데이터를 빨리 끌어올 수.. [ 운영체제 ] 컴파일(Compile)과 링킹(Linking), 런타임(Runtime), 로딩(Loading) 이 글에서는 주소 바인딩(Address Binding)을 이해하기 위해 꼭 알아야 하는 용어들을 설명한다. 원래 주소 바인딩을 바로 다루려고 했으나 정리하다가 용어가 헷갈려서 공부할겸 정리한다. 컴파일, 런타임, 로딩을 정확하게 이해해야 주소 바인딩을 이해할 수 있다. 컴파일이란? 컴파일은 원시 코드를 컴퓨터가 이해할 수 있는 언어로 번역해주는 과정을 말한다. 아래 그림을 보자. 위 그림은 컴파일 과정을 나타낸 그림이다. 우리는 컴퓨터가 0과 1만 이해할 수 있다는 것을 잊으면 안 된다. 우리가 흔히 쓰는 파이썬이나 자바, C++과 같은 고급 프로그래밍 언어는 컴퓨터 입장에서는 외계어다. 따라서 우리가 짠 소스코드를 컴퓨터가 이해할 수 있는 언어로 번역해주는 과정이 필요한데, 이를 '컴파일'이라고 한다... [ 운영체제 ] 메모리 계층 구조 이 글은 '메모리 관리'를 공부하기 전에 숙지하고 있으면 도움이 될만한 내용이다. 워밍업 단계라고 생각하자. 먼저 이 글을 포함해서 '메모리 관리' 파트를 읽을 때 컴퓨터구조 지식이 약간 필요하다. 즉, CPU의 작동 원리를 알고 있으면 학습 효과가 올라간다. 컴퓨터구조도 나중에 정리할 생각이기는 하지만 진짜 너무 깔끔하고 이해하기 쉽게 정리해놓은 영상이 있어서 소개를 먼저 하겠다. 20분 정도 되는 분량이지만 꼭꼭꼭 끝까지 보기를 바란다. [ CPU는 어떻게 작동할까 ] 클릭! 위 영상을 다 봤다는 가정 하에 글을 쓰겠다. 만약에 글을 읽다가 생소한 용어가 있다면 위 영상을 꼭 시청하기를 바란다. 컴퓨터의 부속 장치들은 크게 연산장치와 기억장치로 분류할 수 있다. 연산장치로는 CPU, GPU 등이 있고.. [ 운영체제 ] Banker's Algorithm 데드락 해결 방법 중 회피(Avoidance)를 다루다가 Banker's Algorithm 내용이 길어져서 따로 정리한다. Banker's Algorithm은 자원의 인스턴스 개수가 두 개 이상일 때 사용할 수 있는 회피 방법이다. 이 알고리즘에서 사용하는 자료구조는 아래와 같고, 이는 이미 알고 있다는 가정 하에 시작한다. int n = number of Processes int m = number of Resource Types int Available[m] = 각 Resource Type 별로 이용 가능한 instance 개수 // Available[j] = k, R_j의 인스턴스 개수가 k 개라는 뜻 int Max[n][m] = 각 프로세스의(n) 자원별(m) 최대 요구 인스턴스 수 // Max[.. [ 운영체제 ] 데드락(Deadlock) 해결 방법 데드락은 운영체제 입장에서 정말 큰 문제다. 프로세스가 자원을 얻기 위해 영원히 대기하면서 심각한 자원 낭비가 발생하기 때문이다. 따라서 데드락을 제어하는 것은 중요한 이슈다. 데드락을 해결하는 방법은 크게 세 가지로 나뉜다. 1. 데드락에 빠지는 상황을 피하는 방법 ---- Deadlock Prevention ---- Deadlock Avoidance 2. 데드락에 빠지면 다시 이전 돌아가는 방법 ---- Deadlock Detection ---- Deadlock Recovery 3. 데드락 무시(Ostrich Algorithm) ---- 희박한 교착 상태에 대한 문제를 무시하는 방법 3번이 흥미롭다. 우리가 이렇게 데드락에 대해 열심히 배우지만 사실 대부분의 운영체제가 데드락을 무시하고 있다. 발생 .. 이전 1 ··· 9 10 11 12 13 14 15 ··· 22 다음