전체 글(301)
-
[OS] 프로세스의 생성과 복사
프로세스는 프로그램을 실행할 때 새로 생성된다. 사용자가 프로그램을 실행하면 운영체제는 프로그램을 메모리로 가져와 코드 영역에 넣고 프로세스 제어 블록을 생성한다. 그리고 메모리에 데이터 영역과 스택 영역을 확보한 후 프로세스를 실행한다. 프로세스를 새로 생성하는 방법뿐만 아니라 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 방법도 있다. fork() 시스템 호출의 개념 fork() 시스템 호출은 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수이다. 커널에서 제공하는 이 함수는 프로세스를 복사하는 일종의 시스템 호출이다. 컴퓨터를 사용하다보면 fork() 시스템 호출을 자주 접하게 된다. 예를 들어 워드프로세서 프로그램으로 문서 작업을 하다가 새로운 워드프로세서 프로그램을 하나 더 실행하면..
2022.10.11 -
[OS] 프로세스의 구조
코드 영역 코드 영역은 프로그램의 본문이 기술된 곳으로 텍스트 영역이라고 한다. 데이터 영역 데이터 영역은 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳이다. 스택 영역 스택 영역은 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳이다. 예를 들어 프로세스 내에 함수를 호출하면(function call) 함수를 수행하고 원래 프로그램으로 되돌아올 위치를 이 영역에 저장한다. https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/ [컴퓨터 기초] 메모리구조(Memory Str..
2022.10.11 -
[백준] 14890번: 경사로
구현의 실력이 일취월장하고 있다. 처음에 문제 읽을 때만해도 이걸 어떻게 구현하나 난감해 했는데, 단 한 번의 제출만에 성공해버렸다.(소오름...) 우선 문제를 최대한 간단하게 만들어서, 유효한 길인지 판단하는 방법을 단순화했다. 1. Line 추출 괜히 이차원으로 접근하는 코드를 만들면 구현하는 내가 힘들다...ㅠ 한 줄로 만들어서 공통으로 적용하는 코드를 만들면 이해하기 쉽고, 직관적이라 수정하기에 쉽다. 2. 유효성 파악 유효하지 않은 패턴을 파악해보니 크게 아래와 같다. 1) 높이 차이가 1보다 큰 경우 2) 경사로를 놓을만한 충분한 공간이 없는 경우 3) 경사로 배치가 중복되는 경우 1, 2번의 경우 비교적 판단하기 쉬우나, 경사로 배치가 중복되는 경우를 처리하기 까다로웠다. 상대적인 높이 비교..
2022.10.11 -
[백준] 19238번: 스타트 택시
https://www.acmicpc.net/problem/19238 19238번: 스타트 택시 첫 줄에 N, M, 그리고 초기 연료의 양이 주어진다. (2 ≤ N ≤ 20, 1 ≤ M ≤ N2, 1 ≤ 초기 연료 ≤ 500,000) 연료는 무한히 많이 담을 수 있기 때문에, 초기 연료의 양을 넘어서 충전될 수도 있다. 다 www.acmicpc.net 꼼꼼히 문제를 읽어야 하는 문제이다. 주의할 점이 상당히 많기 때문이다. 우선 주요한 수도 코드를 만들어보면 다음과 같다. 1. 후보 고객 탐색 - 최단 거리에 있어야 한다. → BFS 탐색 - 만약 최단 거리인 고객이 다수라면, 우선순위에 따라 정렬 - 보유 연료만으로 도달 불가능한 고객도 고려 → 바로 -1 리턴 2. 해당 고객을 목적지까지 모시는 데 필..
2022.10.11 -
[백준] 2281번: 데스노트
https://www.acmicpc.net/problem/2281 2281번: 데스노트 첫째 줄에 n(1 ≤ n ≤ 1,000), m(1 ≤ m ≤ 1,000)이 주어진다. m은 노트의 가로 칸의 개수(폭, 너비)이다. 다음 n개의 줄에는 각 사람의 이름의 길이가 노트에 적어야 할 순서대로 주어진다. 각 길이는 m www.acmicpc.net 다이나믹 프로그래밍 문제 접한 지 오래되어서 감 떨어질까봐 접한 문제인데, 눈물 나게 어려웠다.. 처음에는 일일이 해야하나 싶다가 해당 이름을 현재의 줄에 그대로 쓸지, 아니면 새로운 줄에 쓸지 결정하는 게 이 문제 풀이의 핵심까지는 캐치했다. 이 문제는 이전 다이나믹 프로그래밍과 다르게 풀면 쉽게 접근할 수 있다. 이전까지는 주로 앞 내용을 기반으로 앞 내용을 반..
2022.10.11 -
[OS] 병렬 처리 기법 정리(feat. 파이프라인, 슈퍼..슈퍼..)
명령어 처리 방법 컴퓨터에서 실제로 병렬 처리가 어떻게 이루어지는지 살펴보자. CPU 내에서 명령어는 제어 장치가 처리한다. 제어 장치는 명령어를 가져와 해석한 후 실행하고 결과를 저장하는 과정을 계속 반복한다. 이러한 과정 전체를 하나의 스레드라고 하며 스레드를 이루는 각 단계는 CPU의 클록과 연동되어 한 클록에 하나씩 이루어진다. CPU에서 명령어가 실행되는 과정은 다음과 같이 4단계로 나뉘는데 연구자 또는 책에 따라 더 세분하기도 한다. CPU는 이러한 단계를 계속 반복하면서 명령어를 처리한다. 1. 명령어 패치(Instruction Fetch, IF): 다음에 실행할 명령어를 명령어 레지스터에 저장한다. 2. 명령어 해석(Instruction Decode, ID): 명령어를 해석한다. 3. 실행..
2022.10.10