분류 전체보기
-
[OS] PCB(Process Control BlockCS/OS 2023. 2. 26. 15:09
이름대로 프로세스 실행을 위한 정보를 모두 가지고 있다. (멈췄다가 복원하려면 원래 어땠는지 알아야 하니까) PCB가 담고 있는 정보 1. identifier (프로세스 id) 2. state (어떤 상태인지. 이걸 알아야 스케줄링 가능하니까) 3. priority (우선순위) 4. pc 값 (program counter=다음번 실행할 명령어의 주소) 5. memory pointers(메모리 관련 정보-위치,양 등) 6. context data 7. I/O status information (I/O의 상태) 8. accounting information(계정관리-관리자냐 사용자냐)
-
[OS] Multi-processing, Multi-programming, Multi-threadingCS/OS 2023. 2. 26. 15:06
세가지 방식 모두 여러 Process나 Thread에 동시 실행을 제공하는 방식이다. 1. Multi-processing 여러 개의 processor(CPU)를 이용해서 여러 프로세스를 물리적으로 동시에 실행하는 방식을 의미한다. 진정한 병렬 실행 방식이다. 2. Multi-programming 프로세스가 I/O event wait를 위해 block되었을 때, CPU를 다른 프로세스에게 할당하여 CPU의 활용률을 높이는 방식이다. 즉, cpu가 I/O wait등 대기하는 상태가 됐을 때 다른 프로그램이 돌아갈 수 있도록 실행 권한을 넘겨주는 것. 시간적으로 여러 프로세스에게 번갈아 가며 CPU를 할당하는 방식으로 동시 실행을 제공하게 된다. 또한, I/O event wait가 아니더라도 일정시간(quan..
-
[OS] InterruptCS/OS 2023. 2. 26. 15:03
프로세서 활용도 개선을 위해 제공된다. 대부분의 I/O장치가 프로세서보다 느리다. 이 때 프로세서가 대기해야 하므로 일시 중지 하면 프로세서를 낭비하는 것이다. 그래서 인터럽트한다. 사용자 코드에는 인터럽트 코드가 없다. cpu와 os가 인터럽트를 처리한다. 인터럽트 발생 시 pc값을 인터럽트 핸들러 프로그램의 시작 주소로 설정, 커널모드로 전환 인터럽트 있는지 체크 -> 프로세스 상태를 stack에 저장 -> 인터럽트 핸들러로 인터럽트 실행 -> stack을 참고해 원래 pc값으로 돌아오기 - 인터럽트를 이용해 I/O에 의해 발생하는 wait 시간을 효율적으로 사용할 수 있게 되었다. - 매 명령어의 수행을 마치고 나면 대기중인 인터럽트가 있는지 확인 한 후 처리한다. - 인터럽트는 시스템, 운영체제,..
-
[OS] Process와 Thread의 차이, Time-sharing, Context SwitchingCS/OS 2023. 2. 26. 15:03
Process란 운영체제가 프로그램을 실행하고 관리하는 단위, 개체를 의미한다. (Processor는 Cpu로, 헷갈리지 말 것ㅋㅋ!!) Process는 프로그램 실행코드, 데이터 영역, 스택, process control block으로 구성되어 있다. 반면 Thread는 Process처럼 별도의 실행 개체로 관리되는 것이 아니라 Process 내부에서 동시 실행(concurrent)을 지원하는 방식이다. 해당 Process가 실행 중(Running)일 때 그 프로세스 내부의 Thread들을 스케줄링하는 방식으로 동시 실행을 제공한다. Thread도 ready, running, blocked 상태를 가진다. 그러나 Thread에 suspend는 없다. Thread가 포함된 Process가 종료되거나, s..
-
[OS] 운영체제의 역할CS/OS 2023. 2. 26. 14:54
-운영체제의 역할 1. 하나 이상의 하드웨어 리소스 활용 및 관리(프로세서, 메인 메모리 등) 2. 시스템 사용자에게 일련의 서비스 제공 3. 보조 메모리 및 I/O 장치 관리 운영체제란? 응용 프로그램 실행을 제어하는 프로그램. 애플리케이션과 하드웨어 간의 인터페이스. 컴퓨터 하드웨어 리소스를 관리하고 컴퓨터 프로그램을 위한 공통 서비스를 제공하는 소프트웨어의 모음이다. -운영체제가 제공하는 것 1. 프로그램 개발 환경 2. 프로그램 실행 3. I/O 디바이스 접근 (드라이버 접근) 4. 파일 접근 제어 5. 시스템 접근system access 6. 에러 감지 및 응답 7. 계정 관리 - 컴퓨터 시스템 내의 자원을 효율적으로 관리한다. - 프로그램 실행 시 오류 검사 및 복구를 지원한다. - 사용자나 ..
-
유클리드 호제법(최대공약수 재귀로 구하기)CS/Algorithm & Data Structure 2023. 2. 21. 02:52
두 자연수의 최대공약수를 구하는 대표적 알고리즘. 특징: 자연수 A,B에서 A%B=R일 때 A,B의 최대공약수 == B,R의 최대공약수 예를 들어 A: 192와 B: 162의 최대공약수를 구할 때(GCD(192,162)) Level A B 1 192 162 2 162 30 3 30 12 4 12 6 즉, 192와162의 최대공약수는 12와 6의 최대공약수(즉, 6)과 동일하다. 따라서 재귀함수를 통해 R이 0이 아닌 동안 두 수를 나누도록 구현할 수 있다. def gcd(a, b): if a%b==0: return b return gcd(b, a%b) print(gcd(192,162))
-
Python의 queueCS/Algorithm & Data Structure 2023. 2. 21. 02:30
파이썬에서 큐를 구현할 때 1. 리스트로 구현하기 2. deque라이브러리 이용 리스트로 구현하는건 시간복잡도가 더 높으니 deque을 이용하는 것이 좋다. 통상적으로 삽입은 append(), 삭제는 popleft()를 사용한다. 오른쪽으로 들어온 요소가 왼쪽으로 나간다고 생각하면 편할 것 같다. from collections import duque queue = deque() queue.append(5) queue.append(3) queue.popleft() => 3
-
[구현] 왕실의 나이트CS/Algorithm & Data Structure 2023. 2. 21. 01:58
나는 아래와 같이 풀었다. 1,1칸부터 8,8칸까지 돌며 조건에 맞는 칸만 체크를 했다. input_data = input() r = int(input_data[1]) c = ord(input_data[0])-ord('a')+1) cnt=0 for i in range(1,9): for j in range(1,9): if abs(r-i)==2 and abs(c-j)==1: cnt+=1 if abs(r-i)==1 and abs(c-j)==2: cnt+=1 print(cnt) 처음에 이동할 수 있는 방향이 몇 개 없으니 그것만 체크하면 되겠다 라고 생각했다 근데 직전에 푼 브루트포스 문제의 여파인지, 8 x 8 좌표는 작으니 그냥 다 체크하자고 생각해버렸던 거 같다. 정답으로 보여주신 코드인데, 처음 생각대로..