본문 바로가기

분류 전체보기

(336)
OS - 프로세스 관리와 CPU 스케줄링 Context switching (문맥 전환) CPU가 프로세스에서 작업을 하던 중 인터럽트가 발생하거나 OS의 스케줄대로 프로세스가 변경될 수 있다. 프로세스가 변경될 때 PCB에 있던 정보를 저장하고, 새로 작업해야할 프로세스의 정보는 불러와야한다. 스케줄러가 선택한 프로세스에 실질적으로 프로세서를 할당하는 역할을 한다. 이러한 작업을 해주는 것을 Dispathcher 라 하며 디스패쳐는 OS의 프로세스 관리 부서에 있다. 디스패쳐는 운영체제 모드를 커널에서 유저로 변경하는 역할까찌 수행한다. 그러나 디스패쳐는 Context switching overhead를 일으킨다. 그러므로 너무 많은 전환은 성능에 좋지 않다. 그래서 CPU 스케줄러가 중요하다. 컴퓨터 구조를 간략하게 그려보면 다음과 같다. 하..
백준 2933번 - 미네랄 (C++) https://www.acmicpc.net/problem/2933 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄 www.acmicpc.net 나의 첫 골드 1 해금 문제이다. 문제 이해는 어렵지 않은데 구현하기가 매우 까다롭다. 그리고 DFS와 BFS의 깊은 차이를 느낄 수 있었다. - 문제 조건 두명이 번갈아가면서 미네랄을 하나씩 지우고 만약 하늘에 떠 있다면 미네랄이 클러스터 체로 떨어지게 된다. 그리고 미네랄이나 땅에 만날 때 까지 무너지며 클러스터의 형태는 변하지 않는다. - 나의 접근법 먼저 땅바닥에 붙어있는 미네랄들을 dfs한다. 그리고 ..
OS - 프로세스 관리 프로그램과 프로세스 프로그램: 하드디스크에 설치된 정적인 개체 메인 메모리에 적재되어 메모리 구조를 이루고 카운터나 레지스터 처럼 자원을 사용하며 사용자가 사용하는 개체 프로세스 생명주기 New: 하드디스크에 있다가 인터럽트에 의해 메인 메모리에 적재된 상태를 말한다. Ready: 메모리에 적재된 후 변수 초기화 같은 초기화를 마치고 cpu가 할당되면 바로 실행될 수 있는 상태이다. Running: cpu를 할당받고 작동중인 상태이다. wait: 프로그램이 실행 중 인터럽트가 발생해 잠시 유저 모드에서 커널 모드로 변경되어 프로그램이 대기중인 상태를 말한다. Terminated: 프로그램 종료프로세스 생명주기는 위 처럼 5가지 상태를 지닌다. 위 처럼 실행,대기,초기화를 계속 반복하다가 결국 종료된다. ..
C++ vector 초기화 방법 vector는 자유롭게 크기에 상관없이 데이터를 삽입할 수 있지만 초기화를 해놓고 행렬처럼 사용하고 싶을 수가 있다. 그럴 때 사용하는 방법이다. vector vec(3); //1 vector vec(3, -1); //2 1번 : 크기 3으로 모두 0으로 초기화 2번 : 크기 3으로 모두 -1로 초기화 vector vec(n, vector(m,-1)); 다차원 벡터 초기화. n행 m열로 초기화
프로그래머스 - 행렬의 곱셈 (C++) https://school.programmers.co.kr/learn/courses/30/lessons/12949 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 행렬의 곱셈은 DP를 사용해서 최적화 할 수도 있다. 물론 이건 2개만곱하는 거니까 이런것 까지는 필요 없지만 DP포함이 되었다면 레벨 2가 아니겠지. 행렬의 곱셈을 할 때, answer[a][d] = A[a][b] * B[c][d] 에서 b = c 임을 눈치챈다면 쉽게 풀 수 있다. 이런 규칙을 찾는 문제는 손으로 써서 관찰하는 것이 규칙을 찾기 편하다. 물론 머리가 좋으면 바로 눈치챌 수도 있..
OS - 운영체제의 주요 서비스: 프로세스, 메모리, 파일관리 운영체제가 하는 일은 마치 나라의 정부가 하는 일과 비슷하다. 직접 건물을 짓거나 무언가 하지 않지만 허가를 내주고 정책을 결정하는 등 모든것의 관리를 한다. 운영체제 별로 차이는 있지만 보통은 네가지의 서비스를 제공한다. 부팅 서비스 - ROM을 통한 컴퓨터 부팅시 서비스 사용자 서비스 - 프로그래머가 프로그래밍 작업을 쉽게 수행할 수 있도록 함. 시스템 서비스 - 시스템의 효율적인 동작을 보장(보호가 포함됨) 시스템 호출 - 프로그램이 운영체제의 기능을 서비스 받을 수 있는 프로그램과 운영체제 간의 인터페이스를 제공 이 외에도 네트워크 기능, 보호기능 등 많은 일을 한다. 이 중에서도 System Call을 알아보자. System Call 애플리케이션이 OS의 서비스가 필요할 때 호출하는 것을 말한다..
OS - 듀얼모드와 하드웨어 보호 듀얼모드와 하드웨어 보호 듀얼 모드 OS는 유저모드와 커널모드(관리자 모드, 특권 모드)로 나뉜다. 유저가 만약 모든 권한을 가진다면 하드웨어에게 해를 끼칠 수 있는 상황이 존재할 수 있다. I/O를 침범할 수 있다. 어떠한 프로그램이 OS상태를 바꾸거나 강제로 디스크를 탐색할 수 있다. 즉 해킹이나 불법 프로그램에 의해 의도치 않은 상황이 발생할 수 있다. 이러한 상황을 방지 하기 위해 OS는 듀얼 모드를 지원한다. CPU 레지스터는 flag를 가지고 있다. 사진의 mode bit가 레지스터가 갖고 있는 그것이다. 여기엔 여러가지 비트가 있는데 그 중 하나이다. flag비트에 따라 유저 모드와 커널 모드가 바뀌게 된다. 이것은 하나의 인터럽트로 작용한다. 인터럽트에 의한 설명은 이전 포스팅에 자세히 다..
백준 6087번 레이저 통신 (C++) https://www.acmicpc.net/problem/6087 6087번: 레이저 통신크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net BFS , 다익스트라 문제이다. 사실 다익스트라의 정확한 정의를 모르겠다. 이 문제는 최단거리이긴 하지만 무조건 최단으로 가면 안되고 조건이 추가되었고 그 조건이 분기점이 된다. 그냥 조건이 있어도 최단거리라는 조건과 배열을 통한 조건이 있다면 다익스트라 라고 하는 것일까 ? 이건 잘 모르겠다. 아무튼, 많은 틀렸습니다와 시간초과 메모리초과 날 수 있는 건 다 났던 문제였다. 왜 정답률이 ..