Home

Belady의 역설이란? 개념 정리

운영체제를 공부하다보면 물리적 주소가 아닌 가상의 주소를 사용하는 가상메모리와 가상 메모리 기법 중에 큰 프로그램을 여러 개의 page 단위로 쪼개서 사용하는 paging 기법에 대하여 공부하게 됩니다. 하나의 프로그램이 수행될 때, 한 번에 메모리에 올리지 않고 page 단위로 쪼개서 사용하게 되면서, HDD나 SSD와 같은 저장장치에서 일부만 불러와서 사용할 수 있습니다. 이렇게 되면서 여러개의 프로그램을 메모리에 올릴 수 있고, 메모리 용량보다 프로그램의 크기가 큰 경우에도 수행할 수 있으며, CPU의 가용률이 더 높아지게 됩니다. 또, 부족한 메모리를 효율적으로 사용할 수 있습니다. 이후, 프로그램 전체를...

Read more

Windows에서 파일 복구가 불가능하게 만드는 방법

우리들은 Windows에서 파일을 영구 삭제를 하면 휴지통에서 복구할 수 없기 때문에, 파일을 찾을 수 없다고 생각하는 경우가 많습니다. 하지만 인터넷에 존재하는 프로그램을 이용하여 누구나 손쉽게 복구할 수 있습니다. 이는 실제로 컴퓨터에 있는 저장장치(SSD, 하드디스크 HDD)에서는 파일 데이터를 지우지 않고, Windows 상에서 파일이 없는 것 처럼 mapping에서의 연결을 끊어버리기 때문입니다. mapping이란 파일이 존재하는 위치를 표기한 일종의 작은 기록부라고 생각하면 됩니다. 따라서, 영구 삭제를 한다고 하더라도 저장장치를 다시 스캔하여 파일을 찾아낼 수 있습니다. 파일을 실제로 복구 불가능하게...

Read more

프로세스, PCB, 물리/가상 메모리, 컨텍스트 스위칭이란? 개념 정리

1. 프로세스(Process)의 개념 Windows 에서의 작업 관리자에서 확인 가능한 프로세스 프로세스(process)는 컴퓨터에서 실행되고 있는 컴퓨터 프로그램을 말합니다. OS는 프로그램이 실행되면 디스크에 있는 데이터를 메모리에 적재합니다. 2. 프로세스의 구조 및 특징 프로세스 구조 프로세스는 위와 같이 생겼으며, 해당 요소들을 가장 낮은 주소에 위치한 것부터 설명하면 아래와 같습니다. 텍스트(text) : 수행하는 프로그램 코드가 들어가 있는 영역 데이터 섹션(data) : 전역 변수들을 수록. 초기화 된 전역 변수와 초기화 되지 않은 전역 변수 영...

Read more

프로세서 레지스터와 하드웨어 레지스터란? 개념 정리

1. 프로세서 레지스터 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소로 현재 계산을 수행중인 값을 저장하는 데 사용 레지스터는 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리 CPU는 메인 메모리에서 캐시를 거쳐 레지스터에 데이터를 옮겨와서 데이터를 처리한 다음 다시 메인 메모리로 데이터를 넣습니다. 이런 방식을 로드-스토어 방식이라고 합니다. 프로그램이 실행될 때, 프로세스의 데이터를 연산할 때 레지스터에 데이터를 넣어 프로그램을 수행합니다. 레지스터의 종류로는 데이터 레지스터, 주소 레지스터, 범용 레지스터, 명령어 레지스터와 같은 것들이 있다. ...

Read more

반도체 공정에서 집적도(나노공정)의 개념과 줄어들 때 장점

1. 집적도란? 집적도 혹은 미세공정라는 용어는 반도체에서 많이 사용합니다. intel의 경우 얼마 전 10nm 공정 지연을 발표하면서, 주가가 16% 급락하기도 하였습니다. 집적도는 무엇일까요? 집적도는 동일한 면적이라고 가정했을 때, 반도체 칩이 얼마나 많은 논리소자(논리연산을 하는 최소 단위의 회로)로 구성되어 있는지를 나타내는 척도로 사용합니다. 집적도가 높으면 공정이 더 많은 논리소자가 동일 면적에 들어가있다고 볼 수 있죠. 현재 반도체의 공정에 사용되는 단위는 nm(나노미터)입니다. 나노미터는 $ 1nm = 10^{-9}m $ 의 크기로 굉장히 미세한 크기입니다. 2020년 10월 2일 현재 inte...

Read more

[프로그래머스] K번째수 풀이

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/42748 2. 풀이 복잡도 계산 없이 정렬 후에 해당 인덱스의 숫자를 출력하면 되는 간단한 문제입니다. def solution(array, commands): answer = [] for _from, _to, idx in commands: answer.append(sorted(array[_from-1:_to])[idx-1]) return answer

Read more

[프로그래머스] 정수 삼각형

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/43105 2. 풀이 dp를 이용하여 문제를 해결합니다. 이전 합들 중에서 자신에게 올 수 있는 값 중 더 큰 값과 자신의 값을 더해주는 과정을 반복합니다. def solution(triangle): sum_list = [[0] * (len(triangle)) for _ in range(len(triangle))] sum_list[0][0] = triangle[0][0] for row in range(1, len(triangle)): sum_list[row][0] = t...

Read more

[프로그래머스] 가장 먼 노드

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/49189 2. 풀이 BFS 를 이용해서 가장 마지막의 높이에 존재하는 노드의 개수를 세어주면 됩니다. from collections import deque def solution(n, edge): answer = 0 road = {} is_visited = [False] * (n + 1) for a, b in edge: ## 갈 수 있는 길을 dictionary 를 이용하여 표현 if a not in road: road[a] = []...

Read more

리눅스 환경변수 echo$!, $?, $$ 및 특수문자 &, &&, ||, {}, $? 명령어 사용 방법

리눅스에서 잘 보기 힘든 명령어들이나 특수문자가들어간 명령어에 대하여 정리해보았습니다. 추가적인 내용은 zetawiki에 잘 정리되어 있습니다. 명령어 사용 예시 설명 $! echo $! 백그라운드에서 가장 마지막에 실행된 프로세스(명령어)의 PID 값을 출력 $? echo $? 가장 마지막에 종료된 프로세스(명령어)의 종료 상태(정상 0, 이외에는 조건에 따라 다른 return) 출력 $$ echo $$ ...

Read more

Electrical Idle이란?

PCIe 뿐 아니라 데이터 송수신 버스에서는 Electrical Idle이라는 용어가 많이 등장합니다. Electrical Idle은 전기적으로 들어오는 differential signal의 경우에 2개의 Link에서 들어오는 differential 신호의 전위차가 없는(0인) 상태를 의미합니다. 즉 D+, D- 신호를 받고 있다면 정상적으로 신호가 들어오는 경우에 지속적으로 전위차가 존재할 것입니다. 하지만, 아무 신호도 들어오지 않는다면 전위차가 0이겠지요. 이러한 경우 신호를 받는 수신측인 Rx 원래 들어오는 신호를 이용하여 Clock을 알아내게 되는데, 전위차가 0인 경우에는 들어오는 신호를 바탕으로 Clo...

Read more