프로세스의 정의, CPU 스케줄러, 멀티 프로그래밍

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
경성대학교 양희재 교수님 수업 영상을 듣고 정리하였습니다.


프로세스 관리 (Process Management) = CPU 관리

프로그램 vs 프로세스

프로세스(process, task, job..): program in execution, 실행중에 있는 프로그램을 프로세스라고 한다.

즉, 하드디스크 안에는 프로그램, 메모리 안에는 프로세스라고 부른다.

cpu는 메인메모리 안의 process들을 관리하고 이를 관리한다는것은 cpu가 할당되어지는 시간을 관리하는 것을 의미한다.

Multiprogramming

  • new: 하드디스크로부터 메인메모리로 프로세스가 올라온 상태
  • ready: 모든 초기화를 끝내고 진짜 실행할 모든 준비가 다 된 상태
  • running: 실제로 cpu에 의해 실행상태가 됨, cpu가 실제 실행하는 상태 = 러닝 상태
  • waiting: 프린트할때는 cpu가 더이상 해당 서비스가 아닌 다음 프로세스로 넘어가 다른 프로세서의 러닝상태를 만들어주고 cpu가 실행하고 있던 프로세스는 웨이팅 상태
    • 근데 이때 프린트를 다 하고 끝나면 다시 레디 상태로 온다. 즉 다시 cpu 서비스를 받을 준비를 하고있다는 상태.
  • terminated: 프로그램이 끝난 상태

TSS

IO를 만나지 않더라도 일정 시간이 지나면 강제로 스위칭!

  • time expired: 자기에게 주어진 일정시간이 지나면 자동으로 레디로 감

PCB(Process Control Block)

  • 프로세스 제어 블록으로 TCB(Task Control Block)이라고도 부른다.
    • 이 블락안에는 프로세스에 대한 모든 정보들이 들어있음
    • 한 개의 프로세스에 대해 한 개의 PCB가 할당되며 PCB에는 프로세스에 대한 모든 정보가 들어있다.
  • 프로세스의 상태(process state)- running, ready, waiting…
  • 번지정보(PC, program counter)
  • register: 다른 레지스터들의 정보
  • MMU info(base, limit)
  • CPU Time
  • PID(Process ID, 프로세스마다의 번호)
  • list of open files(어떤 파일들을 사용하고있는지) ….

프로세스는 사람과 비슷한데, 이 PCB는 OS안의 process management 안에 들어있다. 모든 정보를 가지고 있어야 관리가 가능하고 관리를 하려면 모든 정보가 필요하다. 프로세스에 대한 정보는 모두 os안의 프로세스 관리 안에서 다 가지고 있다.

Queue

하드디스크에는 수많은 프로그램들이 있지만 이 모든 프로그램들을 메인메모리가 다 받아줄 수는 없다. 그렇기 때문에 하드디스크에서 메인메모리로 가는 과정에 대기하는 줄이 있고 그것을 Job Queue라고 한다. 그리고 메인메모리에 올라왔다고 해서 바로 서비스를 받지도 못한다. CPU는 하나뿐이기 때문에 결국 한번에 작업은 하나밖에 받지를 못한다.

즉, CPU의 작업을 받기위해서도 줄을 서서 기다려야 한다. 작업을 하고 있는 와중에 IO를 하기 위해서라도 줄을 서서 기다려야 한다.

  • Job Queue: 하드디스크에서 메인메모리로 올라올때의 대기줄
  • Ready Queue: 메인메모리에서 CPU 서비스를 받기 위한 대기줄
  • Device Queue: 프린트나 하드디스크와 같은 디바이스를 사용하기 위한 대기줄

하드디스크에서 메인메모리로 가는 프로세스의 우선순위는 어떻게 정해지는가?

= Job scheduler(long-term scheduler): 메모리에 어느 프로세스를 올릴지를 결정하는 코드로 이미 메인메모리가 꽉 차여있다면 결정할 필요가 없다.
어느 한 프로세스가 끝나 메모리가 비어지면 결정을 내리는 것으로 스케줄링은 자주 일어나지 않다.

= CPU scheduler(short-term scheduler): 프로세스간의 스위칭이 빠르게 돌아가야 한다. 1초에도 수십번씩 일어남. 컴퓨터에서는 CPU가 제일 중요!

= Device scheduler

  • OS안의 Process Management안에는 줄이 많이 서있다.(Job, Ready, Device Queue)
  • 각 줄 안에는 프로세스들이 줄을 서서 기다리고 있고
  • 각 줄에서 어느 프로세스를 먼저 꺼내서 할지를 결정하는 것은 scheduler 프로그램이 결정한다.

멀티 프로그래밍

현대의 운영체제는 대부분 다 멀티 프로그래밍이다. (하나의 메모리에 여러개의 프로세스를 올리는 것)

  • Degree of multiprogramming: 멀티프로그래밍의 정도로 메인메모리에 프로세스가 몇개 올라가져있는가를 살펴본다.
  • I/O-bound process vs CPU-bound process

: 프로세스를 크게 두개 종류로 나눔
-> I/O-bound process: IO관련 작업만 하는 프로세스, 워드같은 프로그램
-> CPU-bound process: CPU 사용하는 프로세스 (계산 많이 하는 프로세스), 슈퍼컴퓨터 사용하는 애플리케이션. 일기예보 등

골고루 사용되기 위해 job scheduler가 적절히 올려주는 것이 중요! 즉, os는 적당히 io와 cpu가 일하도록 해줘야한다!

  • Medium-term scheduler

: 대화형시스템(TSS)에서…

-> 서버컴퓨터를 두고 여러 사용자가 컴퓨터를 사용하고 있다고 하자. 서버컴퓨터 내의 메모리에는 각각 사용자에 대한 프로세스들이 준비되어있을 것이다. 그런데 한 사용자가 잠시 작업을 중단했다고 하자. 그렇다는 것은 그 사용자를 위한 메모리는 현재 준비되어있지만 아무것도 하고 있지 않음을 의미한다. 실제 CPU 또한 그 사용자의 일을 하지 않을 것이다. CPU 입장에서는 해당 사용자의 메모리 사용이 아까울 것이다. os의 프로세스 관리부서(cpu사용시간을 관리하는 부서)에서 메모리를 사용하지 않음을 발견하고 이를 하드디스크에 메모리 전체를 쫓아낸다.(swap out) 비어진 메모리 공간에는 다른 프로세스를 올릴수도 있고 나머지 프로세스의 메모리 크기를 더 크게 해줄 수 있게 된다.

  • swapping: 메인메모리에서 하드디스크로 쫓아내는 행위(swap out) 프로세스 이미지를 쫓아내는 행위로서 디스크를 사용하는 것(backing store-swap device), 사용자가 다시 돌아와서 해당 프로세스를 사용하고자 하여 디스크에 들어갔던 프로세스를 다시 메모리로 가져오는 행위(swap in) 이 모든 행위를 swapping이라고 한다.

즉, medium-term scheduler은 스케줄링이 중간 즈음에 일어나는 것을 의미한다. os가 지켜보고 있다가 어떤 애를 몰아낼 것인지를 결정하는것으로 os가 쭉 메모리를 뒤져가지고 현재 사용되지 않은 어느 놈을 하드디스크로 몰아낼 것인가를 결정하는 것을 의미한다.

  • Context switching(문맥전환)

프로세스가 메인메모리에 여러개 있어도 CPU에서는 하나밖에 일 하지 못한다. 따라서 프로세스간의 이동을 말한다.

  • Scheduler: 다음에 무엇을 할지를 결정하는것. 지금 프로세스 다음 어느 프로세스를 할 것인지 결정하는 컴퓨터 프로그램
  • Dispatcher: 실제로 스케줄러가 선택한 프로세스를 실행하도록 상태, 값을 바꾸어주는 행위 -> p1의 현재 상태를 os의 PCB에 다 저장해놔야 한다. 나중에 다시 돌아왔을때 그 상태로 돌아갈 수 있도록 -> MMU의 base, limit 정보도 PCB에 저장해놓는다 -> p1에서 p2를 넘어가려면 p1의 현재 상태를 PCB 에 저장해놓아야 한다. -> restore -> 이는 os안의 Dispatcher라는 프로그램이 해준다. -> context switching overhead: 저장하고 복원할때마다의 부담이 있기 때문에 이를 너무 자주하면 안된다. overhead의 숫자가 너무 많아진다. 이를 줄이는게 좋음!

운영체제의 주요서비스 - 프로세스, 메모리, 파일관리, 시스템호출

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
경성대학교 양희재 교수님 수업 영상을 듣고 정리하였습니다.


application: 하드웨어의 자원을 사용
hardware: resource
os: 하드웨어 자원을 효율적으로 어플리케이션에게 나누어줌

이런 os에는 여러가지 관리들이 있는데

  • process management(cpu, 프로세서 관리)
  • memory management(메인메모리 관리)
  • file management(하드디스크)
  • IO management
  • networking
  • protection..

그러면 각 부서에서는 무슨일들을 하는가?

1. 프로세스 관리(Process Management)

프로세스: 실제 메인 메모리에서 실행 중인 프로그램 (program in execution)

cpu에 의해서 실행되는 프로그램은 메인 메모리 위로 올라와있는 프로그램이니까 cpu와 관련해서는 프로그램관리가 아닌 프로세스 관리라고 한다. 이들은 os의 프로세스 관리 부분이 처리해준다.

  • 프로세스의 생성, 소멸(creation, deletion)
  • 프로세스 활동 일시 중지, 활동 재개(suspend, resume)
  • 프로세스 간 통신 (interprocess communication, IPC)
  • 프로세스 간 동기화 (synchronization)
  • 교착상태 처리(deadlock handing

2. 주기억장치 관리(Main Memory Management)

  • 프로세스에게 메모리 공간 할당(allocation)
  • 메인메모리의 어느 부분이 어느 프로세스에게 할당되었는가를 추적/감시
  • 프로세스 종료 시 메모리 회수 (deallocation)
  • 메모리의 효과적 사용
  • 가상메모리: 물리적 실제 메모리보다 큰 용량 갖도록 해줌
    • 일반적으로 메인메모리는 보조기억장치에 비해서 용량이 작다. 실제 메모리는 조금밖에 없지만 크게 보이도록 하는 기술이 가상메모리임

3. 파일관리 (File Management)

Track/Sector로 구성된 디스크를 파일이라는 논리적 관점으로 보게 관리

  • 파일의 생성과 삭제(file creation/deletion)
  • 디렉토리(directory)의 생성과 삭제(또는 폴더 folder)
  • 기본동작지원: open, close, read, write, create, delete
  • track/sector - file 간의 매핑(mapping)
  • 백업(backup)

4. 보조기억장치 관리 (Secondary Storage Management)

하드디스크, 플래시 메모리 등

  • 빈공간 관리(free space management): 처음에는 블락들이 하나도 사용안되고 있다가 사용된다면 그 해당 공간들을 관리
  • 저장공간 할당(storage allocation): 3개의 블락이 필요하다면 비어있는 공간중에 어느 블락을 사용할것인지 처리
  • 디스크 스케줄링(disk scheduling): 블락들이 흩어져있는데 헤드를 많이 움직이면 시간이 많이 걸릴테니 최소한의 움직임으로 원하는 track/sector를 읽어올 것인가를 결정

5. 입출력장치 관리 (I/O Device Management)

장치 드라이브 (Device driver), 장치를 사용하기 위한 드라이브가 필요한데 이 드라이브는 os에 포함되어있다.

  • 입출력 장치의 성능향상: buffering, caching, spooling
    • buffering: 입출력장치에서 읽은 내용을 일단 메모리에 들고옴, 그래야 나중에 또 그 파일을 쓸때 시간을 줄여서 사용할 수 있다.
    • caching: buffering과 비슷
    • spooling: 메모리 대신 하드디스크를 중간매체로 사용. 프린트로 글자를 찍는다면 프린트는 속도가 느리니까 일단 하드디스크에 저정하고 그 내용을 프린트에 보냄으로써 그 사이 cpu는 다른일을 할 수 있도록 한다.

시스템 콜(System calls)

일반 애플리케이션 서비스가 os가 제공하는 서비스를 받기 위해서 호출하는것. 즉, 운영체제 서비스를 받기 위한 호출을 의미한다.

  • Process: end, abort(강제종료), load(하드디스크의 프로그램을 메모리에 가져오는 것), execute, create(프로세스를 만들고), terminate(=end), get/set, attributes, wait event, signal event
  • Memory: allocate, free(메모리 되돌려줌)
  • File: create, delete, open, close, read, write, get/set attributes
  • Device: request, release, read, write, get/set attributes, attach/detach devices
  • Information: get/set time, get/set system data
  • communication: socket, send, receive
<순서>
EAX: 해당하는 명령
ECX = attributes
EBX = file name
swi
-> 원하고자 하는 파일이 생성됨
일반 어플리케이션이 os에 요청하는 것을 `system call` 이라고 하고, 시스템 콜은 일반적으로 특정 레지스터에 특정 값을 건 후에 swi를 걸어봄으로써 서비스를 받을 수 있다.

이중모드, 하드웨어 보호

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
경성대학교 양희재 교수님 수업 영상을 듣고 정리하였습니다.


이중모드(Dual Mode)

한 컴퓨터를 여러 사람이 동시에 사용하는데 한 사람이 고의/실수로 잘못된 명령을 내리면 그 영향이 전체에 미칠 수 있다.

cpu를 다운 시키는 명령어에는 stop, reset, halt가 있는데, 어떤 사용자가 프로그램을 하드디스크에 깔면서 stop이라는 명령을 넣어뒀다고 하자. 이후 프로그램을 실행시키면 해당 프로그램은 메인 메모리로 올라가게 될 것이고 stop명령을 cpu가 들고와 실행한다면 cpu는 정지하게 된다. 정지된 cpu가 다시 동작하는 방법은 컴퓨터를 껏다 키는 방법 뿐이다. 서버컴퓨터일수록 그 시간은 더 오래 걸리고 혼자 사용하는거면 그나마 났지만, 여러명이 하는 컴퓨터일수록 치명적인 상황을 초래할 것이다.

그래서 사용자 프로그램(일반 유저)들은 이런 명령어를 사용하면 안된다. 즉, 오로지 관리자만 내릴 수 있어야한다. 그래서 이중모드를 만들었다.

이중모드란 cpu가 동작하는 모드를 2가지로 두겠다는것을 의미한다.

  • 사용자(user) 모드: 일반 사용자가 사용하는 모드
  • 관리자(supervisor,시스템(system), 모니터(감시자, monitor), 특권(privileged mode) 모드: 컴퓨터에서 관리자는 os

cpu가 메모리에 있는 명령을 읽어와서 실행하는데, os에 있는 명령을 실행할 적에는 cpu가 관리자 모드에서 동작하도록 하고 일반 유저 영역의 메모리를 가져와 실행하면 사용자모드에 있도록 한다.

특권명령(privileged instruction): 관리자 모드에서만 내릴 수 있는 명령인 stop, halt, reset, set_timer, set_HW 등 은 일반 사용자가 아닌 반드시 os(운영체제, 관리자)만이 내릴 수 있도록 한다.

이중모드는 어떤식으로 만드는가?

cpu안에는 레지스터(비트들의 모음. 32bit라고 하면 비트가 32개 들어있음), alu, cu도 있는데, 이 비트들에는 어떤 프로세서(cpu)의 상태를 알려주는 비트를 둘 수 있다.

  • 캐리(carry)
  • negative: 연산의 결과가 음수가 나왔을때
  • zero: 앞의 연산이 0이 나올때
  • overflow: 앞의 연산이 그 연산 결과가 자리 범위를 넘었을때

fleg :깃발, 사건이 일어나면 깃발을 들고 사라지면 내리는 것과 같이 상태를 나타내는 것을 플래그라고 한다 즉, 1이면 발생한것이고 0이면 발생 안한 것!

이중모드에서 갑자기 플래그?

레지스터 안에 있는 1개의 비트를 모니터 비트로 할당해서 이중모드를 나타낸다.(이중모드를 나타내는 비트를 하나 더 추가한다. 그때 비트의 이름이 monitor, system 등이다.)

즉, 1이면 시스템 모드, 0이면 유저 모드!

처음 파워를 키면 부팅을 통해 os가 메인메모리로 올라가고, 올라가는 도중에는 모두 모니터 비트가 다 1(시스템모드)이다. 즉, os가 동작할 적에는 시스템모드에서 동작한다(os가 모든 명령을 다 내릴 수 있다) 그래서 os 부팅이 끝나면 이제 메모리에 사용자 프로그램을 올릴 것이고, cpu는 그 프로그램을 실행하게된다. 이때는 유저모드가 동작한다. 즉, os가 돌적에는 시스템 모드지만 이제 os에서 사용자 프로그램으로 갈 적에는 os의 비트를 0으로 만들어줌으로써 유저 모드가 되도록 한다. 그래서 사용자 프로그램이 동작할 때는 유저모드에서 동작하는 것이다.

os가 새로운 프로그램을 실행하면 그 프로그램가 올라오고 (os가 해당 프로그램을 하드디스크에서 메모리로 올리는 행위) os가 프로그램을 메모리에 올리고나면 cpu에서는 프로그램이 실행되기 직전에 해당 비트를 1에서 0으로 만들어준다. 그래서 사용자프로그램이 사용될때는 사용자모드에서 동작이 된다. 따라서 사용자 프로그램에서는 stop과 같은 특권 명령어는 사용하지 못한다.

만약 내가 사용자프로그램에서 햇던 행위를 하드디스크에 저장하고싶다면?

프로그램 자체가 하드디스크에 저장을 해도되지만 문제가 많다. 이는 곧 유저 프로그램이 하드디스크에 접근이 가능하다는 것인데, 그 의미는 하드디스크의 남의 파일애도 접근이 가능하다는 뜻이다. 즉 서버컴퓨터에는 여러 사용자들의 파일들이 저장되어있을텐데 다른 사람들의 파일에도 접근이 가능하다는 의미로 일반 사용자프로그램이 하드디스크를 직접 접근하는것은 보안에 심각한 문제를 끼친다.

즉, 일반 프로그램이 하드디스크에 접근하는 할 때에는 해당 프로그램이 os에 부탁을 해야한다. 이 부탁은 swi를 이용해서 부탁한다.

swi가 온다면 cpu는 지금 하는 일을 중지하고 os의 isr로 접근하여 하드디스크에 저장할 수 있도록 한다. os로부터 인터럽트를 걸어서 cpu의 모드가 1로 변경되면 이제 os에서는 무슨 명령이든 내릴 수가 있게되고 이때 유저 프로그램에서는 그 어떤 명령들도 내릴 수가 없게된다. 이제 저장을 하고나면 다시 유저영역으로 돌아오고 모니터비트를 다시 0으로 바꿔준다.

대부분의 모든 cpu는 이중모드를 지원한다. (모니터를 나타내는 비트가 따로있음) 그래서 절대 일반유저가 특별한 명령을 내리지 못한다.

만약 내리려면 어떻게 될까?

cpu가 그 명령을 읽어왔는데 모니터비트가 0임을 확인했는데 유저모드에서 stop명령이 왔다면 cpu는 이 명령이 잘못된 명령이라고 생각해서 내부적으로 인터럽트가 발생했다고 생각한다. 그래서 os의 isr(해당 프로그램이 잘못된 명령을 내렸을때 처리하는 루틴)을 통해 그 프로그램을 강제로 종료시킨다. 즉 바로 메모리에서 삭제시켜버린다.

이중모드는 이런면에서 보호와 관련이 있다.(protection)

컴퓨터에서 보호받아야하는 3가지

1. 입출력장치 보호(IO, Input/Output device protection)

일반사용자가 하드웨어를 자기멋대로 사용할 수 있도록 하면 안된다.

  • 서버컴퓨터는 동시에 여러사람이 사용하는데 거기에 프린트가 달려있다고 하자.
  • 한 사용자가 프린트를 사용하고 있는데 다른 사용자가 그 프린트에 대해 리셋 혹은 자기도 찍겠다고 신호를 보낸다면 프린트의 한줄에는 다른 사람꺼도 찍히게 된다.
    • 프린트 혼선, 강제 리셋 발생
  • 혹은 프린트 말고도 서버컴퓨터에는 대용량 하드디스크도 달려있다.
  • 하드디스크에 여러사람들의 파일들이 들어있을텐데 뿐만 아니라, 자신의 중요정보를 하드디스크에 저장했는데 이를 마음대로 누군가 접근해서 보면 안된다.
    • priviliged instruction violation
    • 그러니까 프린트, 하드디스크 등은 아무나 볼 수 없도록 보호를 받아야 한다.

이를 보호하려면, 이 접근 자체를 못하도록 하려면 입출력장치를 제어해야한다. 입출력장치와 관련이 있는 명령어들은 아래와 같다.

-> in(키보드나 마우스 같은 입출력 장치로부터 정보를 받아들이는 것), -> out(출력장치에 명령을 내리는것(출력을 내보내라고), 프린트, 디스크, 스피커, 램 등)

-> 이런 명령어들을 priviliged instruction 함으로써 os만 내릴 수 있도록 해야한다. 즉, 입출력 관련 명령어는 무조건 특권명령어이다.

2. 메모리 보호 (Memory protection)

유저1 프로그램이 돌면서 해당 프로그램이 유저 2,3 메모리 영역을 읽으려고 하거나 혹은 os안의 값을 바꾸려고 한다면 이를 해킹이라고 하고 이는 보호받아야한다.

  • cpu에서 메모리로 address bus(몇번지를 읽겠다는 명령)가 가면 data bus(몇번지에 해당하는 데이터)를 통해 cpu로 오게 된다.
  • 일반 유저프로그램이 os나 다른영역에 가지 않게 하려면 address bus를 잘라버려야 하는데, 이는 자기 영역에도 못들어가게 함으로 해결책이 되지 않는다.

그러면 다른 방법은 address bus에 문지기를 세워두는 것!

어떤 주소를 보낼 적에 그 주소가 해당 영역에 해당되는 주소가 맞다면 문지기가 통과시켜주고 벗어나면 문지기가 거절을 내버림.

문지기(MMU: Memory management unit)는 실제로 레지스터를 둔다. base, limit 이런식으로 base에서 limit 사이에 들어오면 통과, 벗어나면 cpu로 다시 인터럽트 신호가 가도록한다. 인터럽트 신호를 보내주면 cpu는 하던일을 중지하고 os의 isr로 점프하고 해당 isr는 잘못된 번지를 읽으려고 시도하면 그 프로그램을 강제로 종료시킨다.

segment violation : 영역에 대한 침범 > 해당 에러를 발생시키며 강제 종료시킴!

이 mmu의 base, limit 값 설정은 os가 해준다. 이 값을 바꾸는 것은 특권명령으로 해서 올려둬야한다.

3. CPU 보호 (CPU protection)

cpu도 어떤 침범 대상이 된다. 만약 유저 1가 cpu 시간을 독접하게 되어버리면 문제가 될테니까..

따라서 해당 프로그램마다 timer를 둔다. timer는 일정 주기로 cpu에 인터럽트를 걸도록 회로가 설계되어있다. 그러면 해당 시간마다 인터럽트가 걸리면 cpu는 os의 isr로 점프하고 해당 isr에는 해당 cpu가 골고루 돌아가고 있는지를 체크하고, 오랜 시간이 지났는데도 한 유저에게만 묶여있다면 isr이 cpu로 하여금 강제로 해당 프로그램이 아닌 다음 프로그램으로 넘어가도록 조정해준다.

즉, 어느 한 유저프로그램에만 묶여있지않도록 한다. 그래서 timer를 두면 일정시간 지나면 인터럽트 걸리고 해당 isr로 점프하게 되어 해당 루틴이 너무 묶여있는 것 같다면 다음 프로그램으로 넘어가도록 한다.

Interpreter언어와 Compiler 언어

|

개인적인 연습 내용을 정리한 글입니다.
잘못된 내용이 있다면 편하게 댓글 남겨주세요!


Compiler / Interpreter 차이

  • 두 언어의 가장 큰 차이점은 컴파일 시점이다.
    • 즉, 런타임 전에 컴파일을 하는지 안하는지 그게 가장 큰 차이점이다.

컴파일 언어(Compiled Language)

  • 예: C, C++, JAVA
  • 컴파일 언어는 런타임 이전에 기계어로 변환되는 언어이다.
    • 자바의 경우 런타임 이전에 컴파일을 통해 기계어가 아닌 바이트어로 변경되지만, 컴파일 시점이 존재하여 컴파일 언어라고 한다.
  • 전체 소스코드를 보고 명령어를 수집하고 재구성한다.

인터프리터 언어(Interpreter Language)

  • 런타임 중에 프로그램을 한줄한줄 연속적으로 해석하며 실행하는 언어이다.
  • 파이썬의 경우 런타임 중 컴파일 과정에서 렉서(lexer), 파서(parser)를 거쳐 바이트 코드를 만들어낸다.
    • lexer: 요소를 하나하나 쪼갠다, parser: 구문 분석

두 언어의 특징 및 차이점

  1. 컴파일러는 소스코드 전체를 한번 훑고 컴퓨터 프로세서가 실행할 수 있도록 바로 기계어로 변환한다. 인터프리터는 고레벨 언어를 중간 코드로 변환하고 이를 각 행마다 실행한다. 이 중간 코드는 다른 프로그램에 의해 실행된다.

  2. 일반적으로 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다 실행시간이 빠르다.

  3. 컴파일러는 전체 소스코드를 변환한 뒤 에러를 보고하지만, 인터프리터는 각 행마다 실행하는 도중 에러가 보고되면 이후 작성된 코드는 살펴보지 않는다. 이는 보안적인 관점에서 도움이 된다.

고등운영체제, 인터럽트 기반 운영체제(Operating System Interrupt)

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
경성대학교 양희재 교수님 수업 영상을 듣고 정리하였습니다.


고등운영체제

1. 다중 프로세서 시스템(Multiprocessor system)

메모리는 하나인데 cpu가 여러개인 시스템

  • 병합 시스템(Parrallel system): cpu가 여러개, 병렬로 있다.
  • 강결합 시스템(tightly-coupleds system): 강하게 결합, 하나의 메모리에 cpu가 여러개 강하게 결합되어있다.
  • 3가지 장점(performance, cost, reliability)
    • performance: 성능향상. cpu가 여러개 있으면 더 많은 계산이 가능하겠지
    • const: 비용절감. 컴퓨터는 빠를 수록 좋은데 하나의 강한 cpu보다 싸지만 여러개를 cpu를 두는게 더 효율적임
    • reliability: 신뢰도. 하나의 cpu가 고장나더라도 다른애들은 사용가능
  • 다중 프로세서 운영체제(multiprocessor OS): 하나의 메모리에 cpu가 여러개인 것은 multiprocessor OS이다.

2. 분산시스템(Distributed system)

여러개의 컴퓨터를 근거리 통신망(LAN)으로 연결 = cpu도 여러개, 메모리도 여러개로 이루어진 시스템

  • 다중 컴퓨터 시스템(multi-computer system): 여러개의 컴퓨터가 하나의 LAN으로 연결 되어있음
  • 소결합 시스템(loosely-coupled system): 메인 메모리를 공유하지 않음 (하나의 메모리, 하나의 cpu)
  • 분산 운영체제(Distibuted OS): 각각의 컴퓨터에 들어있는 os는 서로 메시지를 주고받으며 하나의 공통의 일을 나누어서 함

다중 프로세서 시스템과 분산시스켐의 장점/목표는 아래와 같다.

  • 성능향상: 강한 컴퓨터(성능이 좋다는건 빨리 계산한다는것)
  • 비용절감
  • 신뢰성(하나가 죽어도 다른일을 할 수 있음)

즉, 구현방식이 다른것이지 하고자하는 시스템을 통해 하고자하는 목표는 동일하다. 그러나 아래는 다르다.

3. 실시간 시스템(Real-time system)

계산이 시간내에 반드시 끝내야하는 시스템, 실시간 시스템이라 한다.

스마트폰에서 컴파일(하이레벨 랭귀지를 기계어로 변환하는것)을 한다고 할때,그 컴파일이 되는 시간은 반드시 몇ms안에 끝나야한다. 즉, 시간에 대한 절대적인 제한을 주는것!

  • 시간제약: Deadline. 시간내에 반드시 끝나야하는 시스템. 그것을 지나가면 실패한 시스템이라 한다.(타이트한 시간제약)
  • 공장 자동화(FA), 군사, 항공, 우주
  • 실시간 운영체제(Real-time OS = RTOS): 3초내에 끝내야한다고 할때, 못 끝날것같으면 나머지 다른애들을 희생시키고(바쁘지 않은 어떤 프로그램) 그 시간을 좀 더 투자함으로써 반드시 시간내에 끝낼 수 있도록 실행

인터럽트 기반 시스템(Interrupt-Based System)

가로채기, 현재 운영체제는 전부다 인터럽트 기반 시스템이다!

컴퓨터의 전원을 키고 boot load를 통해 하드디스크에 설치되이었던 os가 램으로 올라가 상주하게 되면 우리 눈에는 모니터의 바탕화면이 보이고 마우스가 깜빡이는걸 볼 수 있을 것이다. 마우스에 아무런 이동을 주지 않는다면 os는 일단 아무것도 안하고 가만히 있다. 이는 즉, cpu가 아무것도 하고 있지 않음을 의미한다.

그런데 마우스를 움직으면 무슨일이 일어날까?

  • 마우스에서는 전기신호가 발생해서 그 전기신호가 cpu에 보내진다.
    • 마우스가 실질적으로 cpu에 연결되어 있는 것은 아님.
    • 논리적으로 이 마우스가 인터럽트 선을 통해 전기신호를 보낸다.
  • cpu는 메모리 안에 os로 점프를 하게 된다.
    • 인터럽트라고 하는것은 지금 하는일을 중지하고 점프를 하는 것
  • os 안의 어떤일을 하라는 명령을 확인한다.
    • (Interrupt service routine: 인터럽트가 일어나면 이런 서비스를 해주는 코드)

즉, 우리가 바탕화면이 나타나 마우스를 움직이는 그 자체가 인터럽트가 발생한것이고 그 인터럽트 신호가 cpu에 보내지게 되면 cpu는 지금 하던일을 중지하고 os로 넘어가 os안에 들어가있는 마우스 Interrupt service routine으로 점프한다.

어떤 코드가 들어있을까?

마우스가 움직이는대로 모니터의 커서를 옮기는 루틴이 들어있다.

Hardware Interrupt

  • 마우스커서를 hwp로 움직여 더블클릭을 해본다.
  • 더블클릭을 하면 인터럽트에 걸릴것이고 cpu는 os에 들어가 해당하는 코드가 무엇인지를 확인한다.
  • 더블클릭에 해당하는 서비스 루틴을 확인(더블클릭의 x,y좌표에 해당하는 곳이 hwp구나 라는것을 확인)
  • 마우스 인터럽트 서비스 루틴이 하드디스크를 뒤져서 하드디스크 안의 hwp를 뒤져서 확인한뒤 메인메모리로 가지고 온다.
  • 메인메모리에 hwp프로그램이 올라가고 모니터에는 아래 한글 초기화면이 나타나게 된다.

키보드의 경우도 마찬가지다. 키보드의 어떤 키라도 누르면 전기신호가 가서 cpu는 하던일을 멈추고 os안의 키보드의 인터럽트 서비스 루틴으로 점프하게 된다. 즉, os는 하나의 프로그램이고 그 안에는 여러가지 코드가 있는데 그 코드는 인터럽트가 걸려오면 작동을 한다. 이렇게 해당 동작이 멈추게 되면 cpu는 다시 대기하고 있는다.

Software Interrupt > swi

  • hwp 프로그램이 메인메모리로 올라오면 해당 프로그램은 실행이 된다.
  • hwp 실행되다가 하드디스크의 어떤 내용을 읽어오고 싶은 경우,
    • 하드디스크를 읽어오는 루틴(프로그램)은 os안에 들어있음 - hwp가 직접 들고오지않음 (이 또한 ISR임)
  • hwp가 하드디스크의 내용을 읽어오고 싶다면, swi가 os에 점프
  • os안에 있던 코드가 하드디스크에 가서 하드디스크 안에 있던 파일을 읽어와 메인 메모리에 가져온다.
  • 다 읽고나면 다시 원래의 hwp 프로그램으로 돌아온다.

os안에는 많은 코드들이 들어있으며, os 안의 코드는 인터럽트를 통해서 실행이 된다.

Internal Interrupt

  • 컴퓨터 프로그램을 짰는데, 코드내 연산에서 값이 없는 코드가 나오게 되면 그 밑의 코드로는 진행이 안된다.
  • 이런 경우 컴퓨터의 입장에선 cpu에서 프로그램이 실행이 안된다.(저장이 안되니까)
  • cpu는 내부적으로 인터럽트가 발생한것으로 인식
  • os안에는 divide by zero(0으로 나누면 이 코드를 실행하라)라는 코드를 실행한다.
  • 프로그램을 종료시킨다.