본문 바로가기

전체보기

(180)
프로세스 구조 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 주소 공간의 분리 프로세스 내부엔 각자의 역할끼리 모여있다. 이 역할은 메모리에 적재될 때 크게 3가지 영역으로 분리된다. code : 코드를 실행 가능한 기계어 형태로 변환한 곳 이 부분이 변환되면 안 되기 때문에 읽기 전용이다. data : 전역 변수와 정적 변수등 프로그램에서 사용되는 변수를 저장하는 부분. 변수는 런타임 중에도 바뀔 수 있기 때문에 일부 데이터는 쓰기가 된다. stack : 함수가 호출되고 종료될 떄 사용되는 공간, 함수 선언에 필요한 매개변수나 복귀 주소를 담는다. 이 외에도, 초기화 되지 않은 변수 영역인 bss 영역이나 동적 할당 공간인 heap도 있지만 mallo..
DMA(Direct Memory Access) 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! I/O 요청이 발생했을 때 DMA대해 설명하기 전 I/O 요청이 일어날 때의 처리 과정을 알아야 한다. 아래 그림은 디스크에서 데이터를 가져올 때이다. 우리가 사용하는 컴퓨터는 여러 장치들과 연결돼있다. 컴퓨터에도 CPU가 있고, 연결된 장치들에도 CPU가 있다. (교수님은 메인 CPU를 엄마 CPU, 장치들의 CPU를 새끼 CPU라고 비유하셨다.) 메인 CPU가 각 장치들이 작업을 완료할 때 까지 기다리는 것은 매우 많은 시간이 들기 때문에 장치의 CPU에게 I/O작업을 맡기고, 작업이 완료될 때 까지 다른 프로세스의 일을 처리한다. 장치 내부의 로컬 버퍼에 데이터가 준비 되면 장치는 메인 ..
커널(Kernel) 들어가기 전에 학교 수업 때 배운걸 다시 정리해서 쓴 글입니다. 오타 및 잘못된 부분 지적은 언제나 환영입니다! 커널에 대해 대략적인 부분만 다루기 때문에 세부 내용들에 대해선 다루지 않습니다 커널이란? 운영체제에서 가장 핵심적인 부분 운영체제는 하드웨어와 소프트웨어 사이에 위치에 하드웨어의 자원 접근을 대신 관리해주고, 소프트웨어 최적의 상태로 실행 될 수 있도록 지원한다. 그만큼 운영체제는 많은 기능들이 있지만, 이를 모두 메모리에 올리는 것은 낭비다. 따라서, 핵심 기능만 메모리에 올리게 됐는데 이 기능들을 통틀어 커널이라 한다. 커널 모드 사용자가 하드웨어에 직접 접근을 하는 것은 치명적인 결과를 가져올 수 있다. 우리가 사용하는 유저 모드에서 하드웨어 자원에 접근하기 위에선 운영체제에 맡겨야 한..
백준 [13913] 숨바꼭질4(Python3) 지문 해석 현재 위치를 X라 할 때, 일정한 범위 (X - 1, X + 1, X * 2)를 탐색한다. 매 이동엔 1초가 필요하니, 큐를 이용하는 BFS 방식이 필요했다. 방문 여부 체크에 관해서는 Boolean 값이면 충분했다. 최적의 탐색 비용의 경우, 큐 삽입 때, 기존 비용 + 1을 하면 간단히 해결됐다. 하지만, 지나온 경로를 표시하는 부분 해결에서 문제를 겪었다. 지나온 경로 문제 해결 1, 2번은 틀린 풀이다. 1. BFS 한 번 더 사용 데이터 범위가 작기 때문에 N -> K로 가는 BFS의 시간 복잡도가 적은것을 이용해 K -> N으로 다시 BFS를 할까 생각했다. 하지만, 이 과정은 코드가 너무 길어지고, 되돌아간 위치가 최단 경로 중 하나인지에 대한 검증이 필요했기 때문에 좋은 해결책이..
백준 [16564] 히오스 프로게이머(Python3) 들어가기 전에 문제를 해결하기 위해 어떤 생각을 했는지 기록하기 위해 쓰는 글입니다. O(10^8)의 계산을 1초라 가정했습니다. 잘못되거나 개선이 필요한 부분 지적은 언제나 환영입니다! 지문 해석 레벨을 올릴 수 있는 총합 K를 적절히 배분해서 얻을 수 있는 가장 높은 최솟값 T를 찾아야 한다. 브루트 포스로 해결한다면 최악의 경우 O(1,000,000 * 1,000,000,000) = O(10^15) 로 시간 초과를 받는다. 이분 탐색으로 해결한다면 O(1,000,000 * log(1,000,000,000)) O(1,000,000 * 29.8) = O(29,800,000) 로 해결할 수 있다. 이분탐색 범위 지정 N = 2 이고 X = {10, 10}, K = 1이라면, T의 값은 어떠한 경우에도 1..
Python 함수 호출 비용이 비싼 이유 들어가기 전에 잘못된 부분 지적은 언제나 환영입니다! 파이썬은 코테용으로만 쓰고 있기 떄문에 실제 개발과는 다를 수 있습니다. 문제 제기 프로그래밍을 배울 떄, 반복되거나 의도가 명확히 보이지 않는 부분은 함수를 만들어 분리하란 말을 들었을 것이다. https://www.acmicpc.net/problem/1600 을 Python3로 해결하는 과정에서 범위 이탈 검증에 대한 부분을 함수로 분리하니 시간초과를 받게 됐다. 함수 호출에 대해 비용이 생기는 것은 알고 있지만 생각보다 비용이 커서 여기에 대해 알아보게됐다. 문제의 코드 (outRange 함수를 보면 된다.) 더보기 from collections import deque def outRange(thereX, thereY, W, H): if 0
카카오 코테 - 문자열 압축 문자열 길이로 판별하는 방식으로 풀었다. 정답 코드 더보기 def solution(s): half = len(s) // 2 answer = 1e9 if(len(s) == 1): answer = 1 for i in range(1, half + 1): base = s[0:i] count = 1 temp = 0 for j in range(i, len(s), i): current = s[j:j+i] if base == current: count += 1 else: temp += len(base) if count > 1: temp += len(str(count)) base = current count = 1 temp += len(base) if count > 1: temp += len(str(count)) ans..
Codeforces Round #784 (Div. 4) 들어가기 전에 고민 없이 바로 풀었던 문제는 정리하지 않았습니다. 지문은 이해했지만, 어떻게 풀지에 대해 고민해도 풀지 못한 것만 정리했습니다. D. Colorful Stamp https://codeforces.com/contest/1669/problem/D 2칸짜리 스탬프를 찍는 문제. 찍은 곳에 또 찍을 수 있고, 찍은 걸 회전할 수 있다.(스탬프 반대로 찍는다.) 단, 스탬프가 범위 밖으로 나가면 안 된다. 즉, 길이가 1이면 무조건 NO 풀이 문자 W를 기준으로 split한다. 만약, 문자열이 R이나 B만 있는 경우 NO를 출력 왜냐하면 스탬프는 범위 밖으로 찍을 수 없기 때문에 어떠한 경우에도 R이나 B 하나는 있어야 한다. 못푼 이유 WBW에서 NO가 난 것을 보고 겹쳐찍을 수 없는 경우(범위..