School/컴퓨터시스템

중간고사

응엉잉 2022. 4. 20. 22:16

진수간 변환(10진수-2진수, 10진수 소숫점 어떻게 처리하는지도 알아보기)

2진수 음수표현(보수)

2진수 뺄셈

2의 보수 연산

하이 임피던스
V = IR 이므로 I = V/R
저항값을 키우게 되면 전류는 0에 수렴하게 됨
데이터를 다른 곳으로 보내야 할 때, 데이터를 받아야 하는 곳을 제외한 모든 곳에 큰 저항을 걸어주면 전류가 데이터를 받아야하는 곳으로만 흐르기 때문에 데이터 전송에 주로 사용한다

XOR
1이 홀수개 존재할때 output 값이 1

감가산기
4비트 병렬 감가산기의 경우, 4개의 전가산기와 1비트의 입력신호로 구성

SR래치
이전 계산값을 기억하는 기억소자
입력값이 (1,1) 이게 되면 Q, not Q 가정에 위배됨

이 문제를 해결하기 위해 JK래치, (1,1) 인 경우 Q의 보수 출력

D 래치는 데이터를 그대로 출력
T 래치는 보수를 출력

CPU 레지스터
명령어 실행에 필요한 CPU 내부 레지스터
1) PC : 다음번에 인출할 명령어 주소를 가지고 있는 레지스터
2) ACC : 누산기, 데이터를 임시적으로 저장 / ACC의 길이 = CPU가 한번에 처리할 수 있는 데이터 bit 수
ex) 32 bit = 2^32 bit 까지 한번에 처리 가능
3) IR : 가장 최근에 인출한 명령어 코드를 저장하는 레지스터
4) MAR : PC가 기억하고 있는 명령어 주소를 시스템 주소 버스로 출력되기 전 임시적으로 저장하는 레지스터
5) MBR : 메모리에서 읽어온 / 메모리에 저장할 데이터를 임시적으로 저장하는 레지스터

PCB
운영체제가 해당 프로세스를 위해 관리하는 자료 구조
자료구조에 프로세스 실행하는데 필요한 중요한 정보를 보관
- 프로세스 구분자 : 각 프로세스를 구분하는 구분자
- 메모리 관련 정보 : 프로세스의 메모리 위치 정보
- 각종 중간값 : 프로세스가 사용했던 중간값 ... 아무튼 프로세스 관련 정보만 들어가야함
모든 프로세스는 고유의 프로세스 제어 블록을 가진다
프로세스 생성 시 만들어져서 프로세스가 실행을 완료하면 폐기한다
* 포인터가 필요한 이유 : 대기상태에서 같은 입출력을 요구한 프로세스끼리 연결할 때 사용

프로세스 5상태

1) 생성 상태 :
프로그램이 메모리에 올라오고, 운영체제로부터 PCB를 할당받은 상태
생성된 프로세스는 바로 실행되는 것이 아니라 준비 상태에서 자기 순서를 기다림 + PCB도 준비 상태로 옮겨짐

2) 준비 상태 :
실행 대기중인 모든 프로세스가 자기 순서를 기다리는 상태
PCB는 준비 큐에서 기다리며, CPU 스케줄러에 의해 관리
실행될 프로세스를 CPU 스케줄러가 선택
- 준비 상태에서 큐를 몇개 운영할지, 큐에 있는 어떤 프로세스의 PCB를 실행 상태로 보낼지 결정
- CPU 스케줄러가 PCB를 선택하는 작업은 dispatch 명령으로 처리
- dispatch 실행시 해당 프로세스가 준비상태에서 실행상태로 바뀌어 작업이 이루어짐

3) 실행 상태 :
선택된 프로세스가 타임 슬라이스를 얻어 CPU를 할당받아 실행되는 상태
주어진 시간(타임 슬라이스)을 다 사용하면 timeout 실행, 실행상태에서 준비상태로 옮김
프로세스 사이 문맥 교환이 일어남
실행 상태동안 작업이 완료되면 exit 실행되어 프로세스 정상 종료
실행 상태에 있는 프로세스가 입출력을 요청시 CPU 는 입출력 관리자에게 입출력을 요청하고 block 을 실행
block은 입출력이 완료될때까지 작업을 진행할 수 없음
-> 해당 프로세스를 대기 상태로 옮기고 CPU 스케줄러가 새로운 프로세스를 실행 상태로 가져옴

4) 대기 상태 :
실행 상태에 있는 프로세스가 입출력을 요청하면, 입출력이 완료될 때까지 기다리는 상태
입출력이 완료되면 준비상태로 감
- 대기 상태의 프로세스는 입출력장치별로 마련된 큐에서 기다리다가 완료되면 인터럽트 발생
- 대기 상태에 있는 여러 프로 세스 중 해당 인터럽트로 깨어날 프로세스를 찾는다 (wakeup)
- wakeup 으로 해당 프로세스의 프로세스 제어 블록이 준비 상태로 이동

5) 완료 상태 :
프로세스 종료 상태
코드와 사용했던 데이터를 메모리에서 삭제, 프로세스 제어 블록을 폐기
정상적 종료는 간단히 exit() 으로 처리
* 코어 덤프 : 오류나 다른 프로세스에 의해 비정상적으로 종료되는 강제 종료(abort) 만나면 디버깅 위해 종료 직전의 메모리 상태를 저장장치로 옮기는 작업

선점형 스케줄링과 비선점형 스케줄링

구분 선점형 비선점형
작업방식 실행 상태에 있는 작업을 중단시키고 새로운 작업을 실행하는 것이 가능 어떤 프로세스가 실행 상태에 들어가 CPU를 사용하게 되면 해당 작업이 완료될때까지 다른 작업 불가능
장점 프로세스가 CPU를 독점할 수 없기 때문에 빠른 응답시간을 요구하는 대화형 시스템이나 시분할 시스템에 적합 CPU 스케줄러의 작업량이 적고, 문맥 교환의 오버헤드가 적음
단점 문맥 교환의 오버헤드가 많음 기다리는 프로세스가 많아 처리율 떨어짐
사용 시분할 방식 스케줄러에 사용 일괄 작업 방식 스케줄러에 사용
중요도 높음 낮음


FCFS
준비큐에 도착한 순서대로 CPU를 할당하는 비선점형 방식
한번 실행시 해당 프로세스가 끝나야 다음 프로세스 실행 가능
큐가 하나라 모든 프로세스의 우선순위가 동일
처리 시간이 긴 프로세스가 CPU를 차지하면 다른 프로세스는 하염없이 기다려야함 -> 시스템 효율이 떨어짐
현재 작업중인 프로세스가 입출력 작업을 요청하게 되면 해당 시간동안은 CPU가 작업 안함 -> 작업 효율이 떨어짐

라운드로빈
한 프로세스가 할당받은 시간(타임 슬라이스)동안 작업
-> 작업을 완료하지 못하면 준비큐의 맨 뒤로 가서 자기 차례를 기다리는 방식
프로세스들이 작업을 완료할때까지 계속 순환하며 실행
효과적으로 작동하려면 문맥 교환에 따른 추가 시간을 고려하여 타임 슬라이스를 적절히 설정해야 함

타임 슬라이스가 큰 경우 하나의 작업이 끝난 뒤 다음 작업이 시작되는것처럼 보임
-> FCFS 스케줄링과 다를게 없어보임
타임 슬라이스가 작은 경우 문맥 교환이 너무 자주 일어남
-> 문맥 교환에 걸리는 시간이 실제 작업시간보다 상대적으로 커짐
문맥교환에 너무 많은 시간을 낭비해서 실제 작업을 못함

타임 슬라이스를 되도록 작게 설정하되, 문맥 교환에 걸리는 시간을 고려하여 적당한 크기로 해야함

다단계 큐
우선순위에 따라 준비 큐를 여러개 사용하는 방식
프로세스는 운영체제로부터 부여받은 우선순위에 따라 해당 우선순위의 큐에 삽입
우선순위는 고정형 우선순위를 사용
상단 큐에 있는 모든 프로세스의 작업이 끝나야 다음 우선순위 큐의 작업이 시작

다단계 피드백 큐
프로세스가 CPU를 한번씩 할당받아 실행될때마다 프로세스의 우선순위를 낮춤
다단계 큐에서 우선순위가 낮은 프로세스의 실행이 연기되는 문제를 완화
우선순위가 낮아져도 커널 프로세스가 일반 프로세스의 큐에 삽입되지는 않음
우선순위가 낮아질수록 CPU를 얻을 확률이 적어지기 때문에 한번 CPU를 잡을 때 많이 작업하려고 낮은 우선순위의 타임 슬라이스를 크게 함

세미포어
임계구역에 진입하기 전, 스위치를 사용중으로 놓고 임계구역에 들어가는 것
이후 도착하는 프로세스는 앞 프로세스가 작업을 마칠때까지 기다림
프로세스가 작업을 마치면 다음 프로세스에 임계구역을 사용하라는 동기화 신호를 보냄

모니터
공유 자원을 내부적으로 숨기고, 공유 자원에 접근하기 위한 인터페이스만 제공
인터페이스를 통해서만 공유자원에 접근할 수 있게끔 함
-> 자원을 보호하고 프로세스 간 동기화를 시킴

'School > 컴퓨터시스템' 카테고리의 다른 글

자료구조  (0) 2022.04.20
프로세스 동기화  (0) 2022.04.20
CPU 스케줄링  (0) 2022.04.20
스택, 큐, 덱  (0) 2022.04.19
스레드  (0) 2022.04.19