전체 글
-
[OS] 9-1. Virtual MemoryComputer Science/운영체제 2021. 3. 3. 19:26
※ 이번 챕터부터는 메모리 관리 기법 중 paging 기법을 사용하는 것을 가정한다. 실제로도 대부분의 시스템은 paging 기법을 채택하고 있다. # Demand Paging 실제로 특정 page에 대한 요청이 있을 때 해당 page를 메모리에 올리는 것을 말한다. 프로그램에는 안정적인 실행을 위해 방어적으로 넣은 자주 쓰이지 않는 코드 영역들이 매우 많이 존재한다. 그렇기에 실제로 쓰이는 코드들만 메모리에 올리면, I/O 양과 메모리 사용량을 크게 감소시킬 수 있고 더 많은 사용자들이 멀티 프로세싱할 수 있는 환경이 만들어진다. Demand Paging에서 페이지 테이블의 entry에 존재하는 valid/invalid bit의 역할을 살펴보자. Invalid는 주소 영역에서 사용되지 않는 부분이나 페..
-
[알고리즘] 소수 판별 알고리즘 - 에라토스테네스의 체Computer Science/자료구조 & 알고리즘 2021. 3. 3. 18:06
# 소수 (Prime Number) 판별 알고리즘 소수란 1보다 큰 자연수 중 1과 자기자신을 제외한 자연수로는 나누어떨어지지 않는 자연수를 말한다. 코딩 테스트에서는 어떠한 자연수가 소수인지 아닌지 판별해야 하는 문제가 자주 출제되므로 알고리즘을 기억해두면 좋다. 다음은 기본적인 소수 판별 알고리즘을 파이썬으로 구현한 것이다. # 소수 판별 함수 정의 (2이상의 자연수에 대하여) def is_prime_number(x): # 2부터 (x - 1)까지의 모든 수를 확인하며 for i in range(2, x): # x가 해당 수로 나누어떨어진다면 if x % i == 0: return False # 소수가 아님 return True # 소수임 print(is_prime_number(4)) print(is..
-
[백준 1018번] 체스판 다시 칠하기Coding Test/백준 2021. 2. 28. 19:29
# 문제 내 풀이 - 문제 풀이 실패, 수정 답안 # 첫 칸을 검은색, 흰색 각각으로 칠할 때, 둘 중 다시 칠해야 하는 횟수가 최소인 값을 리턴하는 함수 정의 def paint_board(chess_board): # 첫 칸이 검은색일 경우와 흰색일 경우, 각각 다시 칠하는 횟수 start_b, start_w = 0, 0 for i in range(8): for j in range(8): if (i + j) % 2 == 0: if chess_board[i][j] != 'B': start_b += 1 if chess_board[i][j] != 'W': start_w += 1 else: if chess_board[i][j] != 'W': start_b += 1 if chess_board[i][j] != 'B..
-
[백준 2887번] 행성 터널Coding Test/백준 2021. 2. 26. 20:06
# 문제 내 풀이 - 수정 답안 import sys input = sys.stdin.readline # 특정 원소가 속한 집합을 찾기 (Find 연산) def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] # 두 원소가 속한 집합을 합치기 (Union 연산) def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b n= int(input()) loc = [] # 좌표를 입력 받을 리스트 edges..
-
[백준 1978번] 소수 찾기Coding Test/백준 2021. 2. 25. 23:38
# 문제 내 풀이 # 내 풀이 n = int(input()) nums = list(map(int, input().split())) result = 0 # 소수의 개수 # 주어진 수들 각각에 대하여 연산 수행 for num in nums: # 1은 소수가 아니므로 제외 if num == 1: continue check = True # 소수 판별을 위한 flag # 1과 자기 자신을 제외한 모든 수에 대하여 for i in range(2, num): # 나누어 떨어지면 소수가 아님 if num % i == 0: check = False break # 소수라면 개수 count if check: result += 1 # 결과 출력 print(result)
-
[OS] 8-2. Memory ManagementComputer Science/운영체제 2021. 2. 25. 18:29
# Allocation of Physical Memory 메모리는 일반적으로 Interrupt vector와 함께 낮은 주소 영역을 사용하는 OS 상주 영역과 높은 주소 영역을 사용하는 사용자 프로세스 영역 둘로 나뉜다. # 사용자 프로세스 영역의 할당 방법 1. Contiguous allocation (연속 할당) 각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 것이다. 연속 할당 방식은 두 가지가 존재한다. - 고정 분할 방식 프로그램이 들어갈 사용자 메모리 영역을 미리 파티션(partition)으로 나눠놓는 것을 말한다. 이 경우, 동시에 메모리에 load되는 프로그램의 수가 제한되고 최대 수행 가능 프로그램 크기도 제한된다. 위 그림을 예시로 보면 메모리 영역은 이미 고정되어 나뉘어져 ..
-
[OS] 8-1. Memory ManagementComputer Science/운영체제 2021. 2. 24. 18:17
# Symbolic Address VS Logical Address VS Physical Address 1. Symbolic Address - 프로그래머 입장에서 메모리를 다룰 때, 숫자가 아닌 변수명, 함수명 등으로 메모리를 조작하는 상징적 주소 - Symbolic Address가 compile되면 숫자로 된 Logical Address가 됨 2. Logical Address (=Virtual Address) - 프로세스마다 독립적으로 가지는 주소 공간 - 각 프로세스마다 0번지부터 시작 - CPU가 보는 주소 3. Physical Address - 실제 메모리에 올라가는 위치 - 프로그램이 실행될 때, Logical Address를 Physical Address로 주소 변환 (주소 바인딩) # 주소 ..