본문 바로가기

분류 전체보기

(207)
[운영체제] 프로세스 동기화 3 여기서 드디어 채정아 문제 나온다 .. 정아가 문제라는 건 아니고 .. 우리 정아는 최고야 -3- 동기화와 관련된 고전적인 문제 1. Producer - Consumer Problem (= 생산자 소비자 문제) 생산자 버퍼의 홀에 데이터를 채우는 역할 소비자 데이터를 가져가는 역할 생산자와 소비자는 여러 명이 있으며 그렇기 때문에 이들 사이에는 동기화가 필요하다. 예를 들어서 생성자가 2번째 홀에 데이터를 넣었는데 또 다른 생성자가 다시 데이터를 넣으면 안된다. 또한 버퍼가 다 채워져 있는 상태에서는 소비자가 데이터를 가져가지 전까지 생산자는 데이터를 넣을 수 없다. 개인적으로 생산자-소비자 (버퍼/홀/데이터) 개념을 어떻게 이해했냐면 .. 회전초밥 집이라고 비유해서 생각했다. 회전 초밥 집이 있고, 여..
[운영체제] 프로세스 동기화 2 Semaphore 세마포어는 추상 자료형이다. 여기서 추상 자료형이란 "기능의 구현 부분을 나타내지 않고 순수한 기능이 무엇인지 나열한 것을 추상 자료형" 이라고 한다. 전자레인지 시작버튼을 누르면 전자레인지에서 sw/hw 적으로 어떻게 동작하는지는 모르지만 전자레인지가 동작하게 된다. 이렇게 추상 자료형은 내부적으로 어떻게 구현되었기 보다는 기능과 사용방법을 정의한 것을 말한다. 이런 관점에서 세마포어를 이해해 보자면, 세마포어는 여러 프로세스가 하나의 공유자원에 접근하는 것을 제어하는 역할을 한다. semaphore는 정수값을 가지며 이 정수값에 P(S)와 V(S), 2가지 연산을 할 수 있다. 1. P(S) : semaphore를 획득(= 공유자원에 대한 접근권한을 얻음) P(S)연산은 공유자원에 ..
[운영체제] 프로세스 동기화 1 다중 프로그래밍 환경에서는 여러 개의 프로세스가 CPU를 차지하기 위해서 경쟁하고 각 프로세스는 경우에 따라서 다른 프로세스와 데이터를 공유하기도 한다. 이렇게 여러개의 프로세스가 하나의 데이터를 같이 사용하게 되는 경우 해당 데이터에 대한 동기화 처리가 필요하다. 그래야 각 프로세스가 데이터를 사용할 때 문제 없이 사용할 수 있다. (= 공유 데이터에 대한 무결성이 보장된다.) 데이터 접근 컴퓨터 시스템에서 데이터에 접근하는 패턴은 아래와 같다. 데이터가 저장되어 있는 곳에서 데이터를 읽어와 CPU에서 연산을 한 후 다시 데이터를 갖고 온 곳에 가서 저장한다. 데이터를 읽기만 한다면 문제가 되지 않는다. 여러 프로세스가 읽기만 하면 데이터가 변경되는 경우가 없다. 하지만 대부분의 경우 데이터를 조작하기..
[운영체제] 시스템 구조 및 프로그램 실행 컴퓨터 시스템 위의 사진은 컴퓨터 시스템의 하드웨어 구조를 간략하게 요약한 것이다. ✔️ CPU와 Memory로 구성된 것을 보통 컴퓨터라고 하며 ✔️ I/O device의 데이터가 컴퓨터로 들어가는 것은 input / CPU 처리 후 다시 I/O device로 나가는 것을 Output이라고 한다. 메모리는 CPU의 작업 공간이며, 매 clock cycle마다 메모리의 instruction(= 명령어)를 읽어서 실행한다. 여기서 instruction은 PC(Program Counter)에 저장되어 있다. CPU는 이 주소에 저장되어 있는 instruction을 실행하고 또 그 다음의 명령어를 읽고 실행하고 .. 의 과정을 반복한다. Interrupt CPU는 PC의 값을 읽을 때마다 Interrupt l..
[운영체제] 인터럽트 인터럽트 대부분의 시스템에서 하나의 CPU를 두고 여러 프로세스들이 경쟁을 하면서 자신의 작업을 수행한다. 이 때 각 프로세스는 정해진 시간만큼 CPU를 사용할 수 있고 정해진 시간이 지나게 되면 타이머 인터럽트에 의해 다른 프로세스에게 CPU가 이양된다. 그런데, 만약 CPU가 A프로세스에게 할당되어 있는데 급하게 처리해야하는 작업이 발생하면 어떻게 될까? 사용자의 응답에 관한 일인 경우 최대한 즉각적으로 답을 주어야 한다. 이럴 때 발생하는 것이 인터럽트이다. 하드웨어 입출력 장치의 사용, 프로그램에서 0으로 나누는 경우, 커널 함수를 사용하는 시스템 콜 .. 등이 인터럽트에 해당한다. interrupt 라는 단어만 보면 '방해'라는 것을 의미하는 것처럼 들리지만 OS에서는 방해라기보다 우선순위가 더..
[백준] 상수 문제 링크 문제 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다. 상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다. 두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다. 출력 첫째 줄에 상수의 대답을 출..
[백준] 1157번: 단어 공부 문제 링크 문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 소깡이 풀이 import Foundation extension Character { var asciiIndex: Int { return Int(self.asciiValue!) - 97 } } var charDic: [Int] = [Int](repeating: 0, c..
[백준] 2675번: 문자열 반복 문제 링크 문제 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다. QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다. 입력 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 출력 각 테스트 케이스에 대해 P를 출력한다. 소깡이 풀이..