운영체제

운영체제 3

옥돌소녀 2019. 12. 22. 17:09

1. 어떤 시스템은 운영체제를 펌웨어에 저장하고

다른 시스템은 디스크에 저장하는 이유가 무엇일까요 ?

 

os는 컴퓨터 부팅할 때 필수죠 ?

그럼 엄청 중요한 녀석이니까 좀 다른 하드웨어에 저장을

해야할 것 같습니다 . 컴퓨터 공학적 으로 해석해서

풀이해 본다면

1) 일반 프로그램은 전원이 꺼져도 상관이 없습니다

2) os는 전원이 꺼져도 유지가 되어야합니다

 

그럼 일반 프로그램들은 volatile성 저장매체에서

동작을 해야합니다. 하지만 os와 같이 중요한 것들은 non volatile 저장매체에서

동작할 필요성이 있을 거 같습니다. 그러니 ram이 아닌 rom에 저장이 되어야할 거

같습니다

 

 

2. 명령 해석기(쉘)을

커널로 부터 분리한다고 하는데 왜 그런걸까요?

 

쉘의 역할이 무엇일까요 ?

사용자가 지정한 명령을 실행시키는 인터페이스와 같은 역할을 하는것이지요

 

그렇다면 쉘은 커널한테 무엇을 할까요?

입력받은 명령어를 실행시키도록

명령을 내려줄꺼에요

 

쉽게 말하면

사용자가 운영체제 제어를 더 용이하게 하기 위해서입니다

 

 

 

3. 동기적 통신과 비동기적 통신의 장단점 ?

 

동기적이란 어떤 작업을 요청했을 때
그 작업이 종료될 때까지 기다린 후 다음 작업을 수행하는 방식 입니다
시스템의 관점에서 볼 때 동기적 통신은 메시지를 보내고
답변이 올 때까지 해당 답변을 기다리는 방식입니다
프로그래머 관점에서 구현이 간단하다는 장점이 있지만
답변이 올 때까지 프로세스가 어떠한 효율적인 작업을 할 수 없다는 단점이 존재합니다

 

 

비동기적이란 어떤 작업을 요청했을 때
그작업이 종료될 때까지 기다리지 않고 다른 작업을 하고 있다가 요청했던
작업이 종료되면 그에 대한 추가 작업을 수행하는 방식입니다 /
이벤트 핸들러를 이용해야 하는 등의 오버헤드가 발생할 수 있고

cpu에 부하가 올 수 있지만
통신을 하면서 프로세스가 다른작업을 빠르게 수행할 수 있다는 장점이 있습니다

 

 

오버헤드란 무엇일까요??

내가 감당할 수 있는 선을 넘는 경우

추상적으로 표현한 것

실생활의 예로 든다면 과로.. 와 같은 것이 될 수 있겠죠??

 

오버헤드가 왜 발생하는걸까요 ??

 

작업처리가 많다는 것은 그만큼 자원 소모가 많다는 것이고

자원을 효율적으로 관리하기 위한 프로그래밍이 하기 복잡해진다는 것이

있겠죠 ~ 보통 비동기 방식이 많이 사용되는곳이 멀티 스레드입니다

예를 들어볼까요 ?

 

1 자바 끝내고 html css 끝내고 javascript 하기

2 자바하면서 html css 하고 각 언어별 50% 달성과

동시에 javascript 시작하기

 

과연 어떤게 더 쉬울까요?

아무래도 후자가 시간짜기도 힘들고(스케쥴링하기 어렵고)

뇌도 많이 쓰겠죠~ ?? (cpu 사용량 증가 )

 

4. 복사에 의한 송신과 참조에 의한 송신의 장단점

 

call by reference 는 메모리 없는 참조연산자, 같은 메모리 영역을 가리키는 것이지요?

메모리 할당 받은게 없어서 과로(오버헤드)가 일어날 것이 없는거죠~

즉 다시말해, 데이터의 복사 과정이 없기 때문에 오버헤드가 발생하지 않는 다는

장점이 존재하지만 다른 함수나 객체에서 의도하지 않게

원본 데이터의 값을 변경하게 되는 부작용이 발생할 수 있습니다.

 

 

 

 

 

call by value는 값 자체를 부르는것 , 값을 복사해서 대입하는것이지요~

그래서 메모리에 값이 할당되니까 과로(오버헤드)가 일어날 수

있는게 되는거에요 ~

다시말해, 복사에 의한 송신은 원본 데이터는 그대로 유지하기 때문에

데이터의 안정성은 확보할 수 있지만, 데이터의 복사 과정에서

오버헤드가 발생하는 단점이 존재합니다.

 

 

 

 

5. 자동과 명시적 버퍼링

 

자동 버퍼링 경우에는 운영체제가 판단하기에 버퍼링이 필요한 경우에

버퍼링을 수행하기 때문에 시스템 관점에서는 효율적인 자원 활용이 장점입니다 .

프로그래머의 관점에서는 프로그램 구현이 단순하다는 장점이 있습니다

그러나 어떤 경우에는 프로그래머가 명시적으로 정의한 버퍼링보다

효율이 안좋을 수도있습니다

 

 

반대로 명시적 버퍼링의 경우에는 프로그래머가 명시적으로

버퍼링을 수행하도록 구현해야한다는 단점이 존재하지만

튜닝을 잘 하면 자동 버퍼링 보다 높은 성능향상을 기대하 수 있다는 장점이

있습니다.

 

 

6. 고정 크기와 가변 크기 메시지 의 장점과 단점

 

고정 크기 메시지는 시스템 관점에서 항상 고저오딘 크기의 메시지를 다루기 때문에

파이프 라이닝, 버퍼링 등 시스템의 효율을 향상 시킬 수 있는 기법을 활용할 수 잇는 장점이 존재합니다.

그리고 프로그래머의 관점에서는 구현이 쉽다는 장점이 있습니다

 

그러나 고정 크기 메시지는 설정된 크기 보다 작은 크기의 메시지는

옥안 낭비를, 설정된 크기보다 큰 메시지는 전송이 불가능하다는 단점이 존재합니다.

 

반대로 가변 크기 메시지는 시스템이 연산을 최적화 할 수 없다는 단점과

구현이 복잡해지는 단점이 존재하지만 공간을 효율적으로 활용할 수 있고

메모리 범위 안에서 모든 크기의 메시지를 전송할 수 있다는 장점이 존재합니다

 

 

7. 단기, 중기, 장기 스케줄링의 차이점을 설명하시오

 

먼저 장기 스케쥴러는 메모리와 디스크 사이의 스케쥴링을 담당하는 것입니다.

그렇게 때문에 상대적으로 호출되는 빈도가 적습니다

New -> ready

ready(running) -> terminated

일때를 관리합니다.

 

 

반대로 단기 스케쥴러는 cpu와 메모리 사이의 스케쥴링을 담당하는 것입니다.

그래서 장기 스케쥴러에 비해 매우 많이 호출됩니다.

 

ready->running ->waiting -> ready 의 주기를 관리하는 것이죠

 

 

그렇다면 중기 스케쥴러는 무엇일까요 ?

 

중기 스케줄러는 cpu를 차지하기 위한 경쟁이 심해질 때

우선순위가 낮은 프로세스들을 잠시 제거한 후

나중에 경쟁이 완화되었을 때

다시 디스크에서 메모리로 불러와서

중단되었던 부분 부터 다시 실행시켜줍니다

이러한 방법을 스왑핑이라고도 부릅니다.

 

 

 

장기 스케쥴러와 단기 스케쥴러의 가장 큰 차이점은 실행 빈도입니다.

 

프로세스는 무지 빠르게 실행이되고

이러한 프로세스들을 처리하기 위해

즉 프로세스간에 우선순위를 정하기 위해

단기 스케쥴러가 동작합니다.

여기서 스케쥴링의 시간이 지연이 되면 안되기 때문에

단기 스케쥴러는 상당히 빨라야하고 호출 빈도수가 많습니다

 

근데 그에반해

시스템에 새로운 작업이 생성되어 들어오는 것은 분단위로 프로세스의 함수가 실행되는

시간에 비해 무지 깁니다. 추가로 시스템에서 이탈하는 프로세스도 관리합니다

하지만 장기 스케쥴러는 단기 스케쥴러 보다 호출 빈도수가 매우 적습니다.

그리고 장기 스케쥴링은 스케쥴링 시간이 꽤 걸리더라도 신중하게 프로세스를 선택합니다

만약 장기 스케쥴링이 I/O 프로세스나 CPU 중심 프로세스 중 한쪽으로 편중해서

프로세스를 받아온다면 ready queue 와 device queue 한쪽에

프로세스가 집중되어 버리고 그렇게 되면 단기 스케쥴러의 균형도

붕괴되어 버립니다.

 

 

 

 

 

 

8. 프로세스 들 사이에 문맥 교환할때 커널이 수행하는 작업을 설명하세요

 

 

커널은 현재 프로세스의 base pointer, program counter 등의 값을

레지스터 파일 또는 메모리 상에 저장합니다.

그 다음 현재 프로세스의 process control block를 대기큐에 등록합니다

현재 프로세스의 문맥을 모두 저장한 이후에는 새로운 프로세스의 문맥을

base pointer, program counter등에 로드한다

 

 

9. 링커와 로더에 대해 설명하시오

 

 

 

링커는 언어번역 프로그램이 생성한 목적 프로그램들과 라이브러리

또 다른 실행 프로그램 등을 연결하여 실행 가능한 로드 모듈을 만드는 시스템 소프트웨어 입니다.

연결 편집기라고도 합니다.

링커는 연결 기능만 수행하는 로더의 한 형태로

링커에 의해 수행되는 작업을 링킹 이라고 합니다

 

 

로더는 컴퓨터 내부로 정보를 들여오거나

로드 모듈을 디스크등의 보조기억장치로부터 주기억장치에 적재하는

시스템 소프트웨어입니다

 

로더의 기능으로는

 

할당 allocation : 실행 프로그램을 실행 시키기 위해

기억장치 내에 옮겨놓을 공간을 확보하는 기능

 

연결 linking : 부 프로그램 호출 시 그 부 프로그램이 할당 된

기억장소의 시작주소를 호출한 부분에 등록하여 연결하는 기능

 

재배치 relocation : 디스크 등의 보조기억장치에 저장된 프로그램이

사용하는 각 주소들을 할당된 기억장소의 실제 주소로 배치시키는 기능

 

적재 loading : 실행 프로그램을 할당된 기억공간에 실제로 옮기는 기능 을 합니다

 

 

 

10.UNIX와 Linux 시스템의 init 프로세스의 역할을

프로세스 종료의 관점에서 설명하시오

 

부팅시 init 프로세스 load 된 후

init 프로세스가 시스템에 필요한 다른 프로세스를

순차적으로 load 시킵니다.

부팅완료후 init 프로세스는 백그라운드 프로세스로서

동작하며 다른 프로세스들을 감시합니다

감시당하던 프로세스 중 부모가 없는

즉 좀비 프로세스가 되었을 경우

해당프로세스 의 리소스를 해제하여 반환합니다

 

 

11 일반 파이프를 사용하는 것이 지명 파이프를 사용하는 것보다 더 적절한

상황의 예와

반대로 지명 파이프를 사용하는 것이 더 적절한 상황의 예를 들어보시오

 

 

 

파이프는 프로세스 간의 통신을 위한 일종의 채널이다

일반 파이프는 파이프를 사용하는 프로세스가 실행중일 때만 존재한다

따라서 일반 파이프는 특정 프로세스만 파이프를 이용할 때 유용하다

 

반대로 지명 파이프는 파일 시스템을 사용하여 프로세스 간의 통신을 구현하는 기법으로서

특정한 속성을 갖는 파이프를 다수의 프로세스에서 이용하고자 할때

유용하다