IT

프로세스 관리 (Process Management)

컴퓨터에서 제일 중요한 자원인 CPU를 어떻게 나눠주는가.

 

프로세스 (process)

 

프로세스 vs 프로그램

프로세스 : 실행 중에 있는 프로그램 (program in execution)

프로그램 : 하드웨어 안에 죽은 듯이 있는 것

무덤 속 프로그램, 살아 움직이는 프로세스

 

추가할 것)

new, ready ,running, waiting, terminated 상태 시나리오 예시로 설명하기

 

 

 

PCB (proccess control block) ; 우리의 주민등록 정보와 비슷하다? 정부가 사람을 잘 관리하기 위해서 정보를 가지듯이.

process = task

그러므로 TCB라고도 부름

프로세스에 대한 모든 정보 (base, limit, 현재까지 프로세스가 얼마나 cpu를 썻는가(그러니 돈을 얼마 내라), PID (프로세스 번호), 열린파일들의 리스트(얘가 지금 어떤 파일을 사용하고 있는 지?))

 

PCB는 메인메모리의 OS쪽에 들어있다. (프로세스 관리 부서에)

 

추가) PCB 예시 시나리오

 


 

Queues

  • job queue

프로세스도 줄을 서야한다?

-> 메인메모리는 작고, 거기 올라가려하는 놈은 많고 -> 줄서서 기다리기

하드디스크안에는 수많은 job들이 들어있는데, 메인메모리로 올라가려면 작업들이 줄서서 기다려야함

 job scheduler ; job queue에 대기하고 있는 프로그램 중에서 어떤 걸 먼저 올려줄 지 결정. OS의 프로그램 중 일부.

  = long term scheduler (앞선 프로세스가 완전히 끝난 뒤에 메모리가 비워져야지만 일어남. 즉, 자주일어나지 않음. 몇분 간격?)

 

  • ready queue

-> 메인메모리 안에 올라왔더라도 cpu에 올라오려면 또 줄서서 기다려야함

 cpu scheduler ; ready queue 안에 줄 서서 기다리고 있는 프로세스 중에 어느놈을 골라서 서비스 해줄 것인가? 

 = short-term scheduler (I/O를 만나던지 time expire되면 그다음엔 cpu를 누구한테 넘겨줄 지 빨리빨리 골라야함. 1초에도 수십/수백번씩 일어날 수 있다. 동시에 프로그램이 돌아가는 것처럼 보이도록 함)

 

  • device queue

-> 프린터나 디스크 등의 그런 장치를 쓰려면 또 줄서서 기다려야함

 device scheduler ; 디스크를 사용하려는 프로세스가 많을 때, 앞에 놈이 끝나면 또 어느 놈을 먼저 서비스를 받게 해줄 것인가?

 

 

줄안서도 되는건 가는(죽는) 것밖에 없음

컴퓨터의 일생 줄서서 기다리는거...

 

오늘했던 내용 다 중요합니다~ 다음시간에는 스캐쥴링 하는 방법에 대해서 공부한다. 특히 cpu 스캐쥴링이 제일 중요.

 

 


 

멀티프로그래밍

; 용어가 무엇인지 이해! (시험출제)

 

- degree of multiprogramming ; 메인메모리에 몇 개의 프로세스가 올라와있는가

- I/O bound vs CPU-bound process

주로 I/O 관련된 작업(입출력)만 하는 프로세스 ; 워드프로세서(문서편집) ...

주로 cpu 관련된 작업(계산)만 하는 프로세스 ; 슈퍼컴퓨터 쓰는 애플리케이션 - 계산량이 방대. (일기예보)

 

job scheduler가 하는 일 : I/O 관련된 작업만 올리면 I/O만 바쁘고 cpu는 할일이 없고, 그 반대도 마찬가지

그러니까 이떄 I/O랑 cpu가 골고루 사용되도록, 메인메모리로 올라가는 작업 중에서 I/O랑 cpu 작업을 적절히 믹스해서 올려준다.

 

 

- Medium-term scheduler :

 swapping 

ex. 시나리오 (그림도 추가)

하나의 서버컴을 여러명이 사용한다고 가정. 서버컴의 메모리에 이용자 A, B, C를 위한 메모리 할당됨

만약에 B가 자리 비움(커피마시러감). 이때 B의 프로세스가 5분 정도 사용되지 않음. 그러니까 B의 프로세스는 그동안은 메인메모리에 더이상 있을 필요가 없음.(메인메모리는 비싼 자원이기 때문)-메모리에 있는데 아무 활동도 안하는 프로세스를 메인메모리에서 디스크(swap device)로 쫒아냄. (swap out)

이제 비어있는 메모리가 생기니까, 새로운 프로세스를 올려주거나 A와 C한테 메모리를 나눠줄 수도 있고...

만일 또 이제 B가 돌아와서 작업을 다시 시작한다면, 이제 B 프로그램이 다시 동작해야함. 이제는 swap device로 갔던 것들이 이제 메인메모리로 다시 돌아옴 (swap in). (꼭 아까 있던 메모리 자리가 아닌 비어있는 다른 자리로 들어가기도 함. 이것도 다 OS가 저번에 쫒아낸 자리나 뭐나 다 기억하고 있어야함(?))

 

short-term보다는 더 적게일어나고 long-term보다는 더 자주 일어나서 medium-term scheduler!

 

운영체제 서비스

(칠판 그림 추가하기)

모든 application 프로그램은 HW 자원을 사용한다.

이때 자원을 관리하고 나눠주는 것은 OS가 담당.

 

이때 OS가 하는 일 (운영체제 서비스) ; 다 "관리" 업무

1. 프로세스 관리

2. 주기억장치(메모리) 관리

3. 파일 관리

4. 입출력 관리

5. 네트워킹 (컴퓨터끼리 통신)

6. 보호

 

각 부서별로 어떤 일을 하는 가 알아보자

 


1. 프로세스 관리

; OS에서 가장 중요한 역할 중의 하나

프로세스 : 메모리에서 실행 상태에 있는 프로그램

cpu에서는 메모리에 올라와있는 프로그램만 다루기 때문에, 특별히 프로그램 관리가 아닌 '프로세스 관리'라고 한다.

 

주 기능 ; 프로세스의 생성-소멸, 프로세스 활동 일시중지-활동재개, 프로세스간 통신, 프로세스간 동기화, 교착상태 처리

 

 

2. 주기억장치 관리

 

메모리의 어느 부분이 어느 프로세스에 할당되어 있는가

프로세스 종료 시 메모리 회수

메모리를 효과적으로 사용

가상메모리 기술; (일반적으로 메모리는 용량이 작지만, 하드디스크는 용량이 크다.

그렇지만 난 메모리를 좀 더 크게 사용하고 싶어! -- 가상메모리 기술)

 

 

3. 파일 관리

(디스크의 원리 -- 칠판 그림 첨부하기)

원래는 물리적으로 track/sector의 집합으로 이루어져있지만, 그걸 사용자에게는 파일이라는 개념으로 보이도록 OS가 관리해줌

주기능 ; 파일 생성/삭제, 디렉토리 생성/삭제, 기본 동작지원 (open, close, read, write, create, delete)

Track/sector - file 간의 매핑(mapping)

 

 

4. 보조기억장치 관리

track/sector을 몇개 모아놓은 것 -- block

(block 관련 추가 조사, 추가자료 첨부하기)

이 블락들의 비어있는 공간, 사용되는 공간이 나눠지는데 이런 공간관리를 얘가 함

 

 

주 기능 ; 빈공간 관리, 저장공간 할당, 디스크 스케쥴링(블락들이 흩어져있는데, 여기 헤드를 많이 움직이면 시간이 만ㅎ이걸리는데, 이때 어떻게 하면 헤드를 적게 움직이면서 원하는 트랙이나 섹터를 읽어올 수 있을 것인가를 결정해줌)

 

 

5. 입출력 장치 관리

 

I/O 장치 관리

주기능 ; 장치 드라이브(새로운 장치 설치할 때), 입출력장치의 성능향상 : buffering(입출력장치에서 읽은 내용을 일단 메모리로 들고오는 것. 한번 들고오면 빨리 읽을 수 있다), caching, spooling(메모리 대신에 하드디스크를 중간매체로 사용하는 것, ex.프린터로 인쇄하는 경우)

 

 


시스템 콜 (System call) ; 운영체제 서비스를 받기 위한 호출

APP 에서 OS를 호출하는 경우 ('야 OS야 이런일 해주라, 저런일 해주라') -- 칠판 그림 첨부

- 주요시스템 콜

- process : end, abort, load, execute, create, terminate, get/set, attributes, wait event, signal event,

- Memory : allocate, free

- File : 생성, 삭제, 열고 닫고 읽고 쓰고 ...

...

 

일반 application 프로그램이 OS한테 요청하는 것을 system call 이라고 한다.

시스템 콜은 일반적으로 특정 레지스터에 특정 값을 준다음에, 소프트웨어 인터럽트를 걸어서 서비스를 받을 수 있다.

 

 

예제 : MS-DOS

- 80년대 pc에서 사용되던 OS

- INT 21H

링크 누르면 DOS 인터럽트 코드 있음

System call을 어떻게 만드는 지 과정

(3C번 function 코드가 create file. -> 'CPU 속의 register에 파일의 속성(파일의 생성날짜, 주인, 파일인지 디렉토리인지 등등)을 넣어라'

여기서 어쩌고 저쩌고 더 있던 것 같은 데 그건 추후 추가해서 수정)

예제 : 파일 만들기 (create file)

 - AH = 3CH. CX = file attributes, DS:DX = file name

(추후 수정; 직접 실습하는 거 이미지-움짤 만들어서 올리기)

 어셈블리어로 실습?

 메모리 어딘가에 우리가 만들고자하는 파일("AAA")을 둔다(100번지에)

 mov CX, 0

 mov dx, 100 // 100번지에 dx를 둔다

 mov AH, 3C

 int 21h // 인터럽트

 

-> 이걸 실행하면 100번지에 "AAA"라는 파일이 만들어진다??

 

예제 : 리눅스

- INT 80H

- 예제 : 파일 만들기 (create file)

  - EAX = 8, ECX = file attributes, EBX = file name

 

코드 (어셈블리): 

  mov EAX, 8

  mov ECX, 0

  mov EBX, '파일이름(파일이름이 적힌 주소)'

  int 80h

-> 이걸 실행하면 n번지에 "AAA"라는 파일이 만들어진다

 

(직접 터미널 창에서 뭐 하는거 있는데 이것도 해보고 영상-움짤-짤 올리기)

 

 

내가 하드디스크에 파일을 어떻게 만들 수 있을까?

-- 파일이름 + attribute 한 뒤에 -> OS한테 부탁만 한다

하드디스크의 몇번째 줄 몇번쨰 섹터에 넣을 지 고민할 필요도 없이, 그냥 정해진 약속대로 EAX, ECX 등등에 정해진 값만 넣고 소프트웨어 인터럽트만 걸어주면 됨.

 

시스템 콜은 어셈블리어로 작성하면 된다.

 

시스템 콜 라이브러리 -- 파일을 지우고/만드는 등의 이러한 루틴들을 처음부터 object 파일 형태로 만들어 우리한테 제공함 

이중 모드 (Dual mode)

 

보통 한 컴퓨터를 여러 사람이 동시에 사용하는 환경이거나, 혹은 한 사람이 여러 개의 프로그램을 동시에 사용하는 환경이 주어진다. 

 

이 경우는 한 사람의 고의, 혹은 실수가 프로그램의 전체에 영향을 줄 수 있다.

만약, STOP, HALT, RESET 명령어와 같은 것을 사용하는 경우 치명적이다.

 

참고 : STOP 명령을 내린다면, 과연 어떤 일이 일어날까?

더보기

STOP 명령어가 든 프로그램이 메인 메모리에 올라가게 되고, 그 프로그램을 CPU가 읽어오게 된다.

그러면 그 CPU가 중지된다. 중지된 CPU를 깨우려면 (서버) 컴퓨터를 껏다 키는 방법 밖에는 없다.

 

 

따라서 일반 유저는 그러한 치명적 명령을 사용할 수 없도록 만들기로 했다.

그렇게 하기 위한 해결책으로, 모드를 2가지로 나누었다. 하나는 사용자 모드, 하나는 관리자 모드이다.

CPU가 OS에 있는 명령을 실행할 적에는 관리자모드에서 동작하도록 하고, 일반 유저의 메모리 영역에 있는 내용을 읽어왔을 경우는 그것이 사용자 모드에 있도록 한다.

 

 

참고) 관리자 모드 = 시스템 모드 = 모니터 모드 = 특권 모드

 

또 어떤 명령이 관리자 모드에서 가능할까? : 특권명령

 - STOP, HALT, SET_TIMER, SET_HW

 

OS가 동작할 적에는 시스템 모드에서 동작한다.

 

출처 : http://blog.skby.net/%EC%9D%B4%EC%A4%91-%EB%AA%A8%EB%93%9C-dual-mode/

그렇다면 컴퓨터 이중 모드는 어떻게 구현할까?

Register (Bit들의 모음)에 이중모드를 나타내는 비트를 추가한다.

만약 비트 값이 1이면 모니터 모드, 0이면 사용자 모드를 의미한다.

 

전원을 켜면 OS부팅 시작. 이 때는 비트 값이 1로 모니터 모드이다.

부팅이 끝난 후 우리가 마우스를 사용해서 게임 프로그램 아이콘을 더블클릭하면

OS가 프로그램을 메모리로 올려주고, CPU 레지스터에 비트를 0으로 바꿔서 사용자 모드로 전환.

게임을 하던 도중 현재까지의 스코어를 하드디스크에 저장하고 싶다면? 

게임, 즉 user program이 직접 하드디스크에 접근할 수는 없다. 게임 프로그램이 OS에 부탁해서

software interrupt가 일어나고 OS 속 ISR 코드로 점프! 이때 다시 비트가 1로 바껴 모니터 모드가 된다. 

 

OS 실행, 하드웨어/소프트웨어 인터럽트 발생 -> 관리자 모드

사용자 프로그램 실행, OS 서비스 끝 -> 사용자 모드

 

레지스터에 모드를 나타내는 플래그(flag), 비트? -- 이 과정 추후 추가해서 정리 (그림도 추가)

하나의 프로그램이 실행될 적에 여러 모드 전환되면서 동작하는 과정도 정리 -- 추후 추가해서 정리 (그림도 추가하기)

(비트가 바뀌고, 유저모드/시스템 모드 전환되고, 인터럽트 발생하는 등등의 과정임)

잘못된 시도를 하는 경우, 비트(플래그)를 통해 보호하는 과정도 정리

 

대부분 우리가 아는 CPU는 모두 이중모드를 지원한다

 


하드웨어 보호 : 입출력장치 보호, 메모리 보호, cpu 보호

 

입출력장치 보호

 

프린터 관련 예시. (첫번쨰 줄은 A 꺼를 찍고 두번째 줄은 B꺼를 찍는 경우 -- 보호가 안되었을 경우의 예시)

대용량 하드디스크 관련. (컴퓨터 사용자 중 다른애가 타인의 중요정보에 접근하지 못하도록!)

in/out 이라는 입출력 제어 명령 아무나 내리지 못하도록. (특권명령어로 지정), 대신 app의 부탁을 받은 OS가 명령을 내려줌.

유저모드에서 out 명령 내리면 -> 내부 인터럽트 실행 -> -> -- 과정 정리

SW 명령 인터럽트 (inter 명령 실행해도 같은 동작)

 

애플리케이션은 직접 하드웨어에 접근할 수없다 - 무조건 OS를 거쳐서. OS가 올바른 명령인지 판단하고 올바르지 않은 명령이면 거부함.

만약에 사용자가 입출력 명령을 직접 내렸을 경우에는 previleged instruction violation(특권 명령 침범)이라고 함.

 

 

 

 

메모리 보호

메모리 안에서 user1, user2, user3 프로그램들이 돌 때, 다른 유저 영역에 접근하지 않도록

(우연히 또는 고의로, 다른 사용자정보/ 프로그램에 대한 해킹, 운영체제 해킹)

어떤 해결법이 있을까?

 

1. Address 버스를 잘라버린다?

  다른 사람 영역에 못들어간다 -- 안됨

 

 

2. 500~2천번지(임의의) 주소면 address 버스에서 문지기가 통과시켜주고, 아니면 통과안시켜준다.

base~ limit 사이의 번지가 아니면 interrupt 발생, 그 결과 잘못된 번지를 읽어오려고 한 프로그램을 정지시킨다.

-- segment violation (영역 침범)

문지기 : MMU (메모리 관리장치), base랑 limit 값은 OS에서 설정됨 

 

 

 

CPU 보호

 

while(n = 1)
{
  // ...
}

 

잘못된 프로그램이 들어간 경우에 (ex. 무한루프), 계속 user1의 프로그램만 실행되고 다른 사용자의 프로그램 실행이 불가

-> CPU 시간 독점

따라서, 이를 예방하기 위해, CPU 타이머를 두고 해당 시간이 지나면 인터럽트를 발생시킴. ISR에서 cpu시간이 다른 유저에게 골고루가는지 아니면 한사람에만 묶여있는지 판단. 후자라면, cpu가 강제로 다른 사용자의 유저프로그램으로 넘어가도록 전환시킴

 

 

참고 링크

더보기

3. 고등운영체제, 인터럽트 기반 운영체제

 

고등 운영체제

지난 번 컴퓨터의 역사를 보면서 여러 OS를 보았는데, 그것들은 주로 Single cpu OS 이다.

그 이후 새로운 고등 컴퓨터구조가 나타나면서 이러한 고등 운영체제도 만들어졌다. 

 

- 참고) 폰노이만 시스템 (Single CPU)

더보기
https://choheeis.github.io/newblog//articles/2020-12/OS-3

CPU(프로세서), 메모리, 버스로 구성됨

 

  • 다중 프로세서 시스템 (Multiprocessor system)
더보기
https://choheeis.github.io/newblog//articles/2020-12/OS-3

 

- 병렬 시스템 (parallel system)

- 강결합 시스템 (tightly-coupled system) ; 메모리를 공유하기 때문에 강하게 결합됨

 

- cpu가 여러 개라서 얻는 3가지 장점: performance, cost, reliability

     - 성능향상 : 더 많은 계산

     - 비용절감 : 하나의 강한 cpu 두는 것보다 약한 여러개 cpu 두는 것이 더 절약

     - 신뢰성 : 하나가 고장나더라도 나머지 cpu 여전히 동작

 

- 다중 프로세서 운영체제 (Multiprocessor OS)

 

 

  • 분산 시스템 (Distuributed system)
더보기
https://choheeis.github.io/newblog//articles/2020-12/OS-3

 

- 다중 컴퓨터 시스템 (multi-computer system)

- 소결합 시스템 (loosely-coupled system) ; 메모리를 공유하지 않고 네트워크로만 결합

- 분산 운영체제 (Distributed OS)

 

각자 자신이 맡은 처리를 한 후, 서로 간에 메시지를 주고받으며 작업을 완성시킴

목적은 다중 프로세서 시스템과 같음 (성능향상, 비용절감, 신뢰성)

 

  • 실시간 시스템 (Real-time system)
더보기

- 시간 제약 : Deadline

그 시간 내에 반드시 실행이 끝나야한다!

 

컴파일이 빨리 되면 좋다. (X)

컴파일이 만드시 0.00n 초 안에 끝나야한다. (O)

 

- 활용 예시 : 공장 자동화(FA), 군사 (미사일 등등), 항공, 우주

- 실시간 운영체제 (Real-time OS = RTOS)

 

 

 


 

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

 

인터럽트

Interrupt : 회방놓다?

  • 현대 운영체제는 인터럽트 기반 시스템! : 하던 일 중단하고 다른 일이 끼어든다.
  • 부팅이 끝나면?
더보기

- 운영체제는 메모리에 상주 (resident)

- 사건 (event)을 기다리며 대기 : 키보드, 마우스, ...

 

  • 하드웨어 인터럽트 (Hardware interrupt)
더보기

- 인터럽트 결과 운영체제 내의 특정 코드 실행 (ISR)

- Interrupt Service Routine 종료 후 다시 대기

 

https://sincerity-sw268.tistory.com/38

ex) 마우스가 움직이면 : 전기신호 발생. interrupt 발생, 마우스가 움직이면 실행되는 interrupt service routine이 실행됨

OS 안에 있는 해당 ISR 코드가 interrupt 발생할 때마다 실행 됨

  • 소프트웨어 인터럽트 (Software interrupt)
더보기
https://sincerity-sw268.tistory.com/38

 

- 사용자 프로그램이 실행되면서 소프트웨어 인터럽트 (운영체제 서비스 이용 위해)

- 인터럽트 결과 운영체제 내의 특정 코드 실행 (ISR)

- ISR 종료 후 다시 사용자 프로그램으로

 

ex) HWP 실행키는도중 memo실행하고 싶었다. SW 인터럽트가 걸림.

 OS에 있는 특정 ISR 실행돼서 HD에 있는 memo파일 찾아 memory에 올림

 

 

인터럽트 기반 운영체제

평소 OS는 부팅 이후 아무것도 안하지만, 인터럽트가 발생될 때마다 실행된다. 

 

  • 운영체제는 평소에는 대기 상태

- 하드웨어 인터럽트에 의해 운영체제 코드 (ISR) 실행

- 소프트웨어 인터럽트에 의해 ''

- 내부 인터럽트(internel interrrupt)에 의해 ''

 

 

참고) 내부 인터럽트의 예시

더보기

C 프로그램

i = 5, j = 0;

i = i / j; // 값 오류, 값이 저장되지 않으므로 코드 진행될 수 없다.

-> 내부적으로 인터럽트 난 걸로 생각한다

-> "devided by zero"라는 ISR 실행됨 ; 잘못된 시도를 한 프로그램을 강제종료 시킴

 

참고) 시스템콜

더보기

* System calls - 운영체제 서비스를 받기 위한 호출 

   시스템 콜을 통해 인터럽트를 실행시킨다

 

https://sincerity-sw268.tistory.com/38

 

  • ISR 종료되면 : 원래의 대기 상태 또는 사용자 프로그램으로 복귀
  • 인터럽트 기반 운영체제

https://sincerity-sw268.tistory.com/38

 

2. 운영체제 역사

 

역사

 

- 컴퓨터 역사 : 1940' 말 (2차세계 대전 이후)

 

1) 처음에는 컴퓨터에 운영체제가 없었음

더보기
최초의 컴퓨터 (참조 : https://choheeis.github.io/newblog//articles/2020-08/OSHistory)

Operator라는 직업군이 따로 있었음

카드 리더(소스, 컴파일러) -> 메모리 -> 프린터에 결과 찍힘

초기 컴퓨터의 입력 (천공카드) (참조 : https://choheeis.github.io/newblog//articles/2020-08/OSHistory)

 

2) Batch Processing (일괄처리) ; 최초의 OS

더보기

오퍼레이터가 하던 일련을 일을 하는 과정의 프로그램을 만들고, 그걸 메모리에 넣자!

-> resident monitor

 

참고) resident ; 상주하는

 

3) Multiprogramming system (다중 프로그래밍)

- CPU scheduling, memory 관리, 보호

더보기

하드웨어 기술의 변화. 1960' 당시

 

기존의 문제점 : 빠른 CPU, 느린 I/O

https://choheeis.github.io/newblog//articles/2020-08/OSHistory

참고) 프로그램이 cpu와 더불어 I/O 모두 사용하게 됨. 이때 cpu 동작과 I/O 동작이 교대로 일어남

이때 I/O 작업 마칠 때까지 cpu는 아무것도 안하고 놀게 된다 (CPU idle 현상) -> 컴퓨터는 비싼 자원인데 놀게 두면 안된다! -> cpu가 놀지 않고 미리 다음 프로그램 실행하게 하도록 함 

-> 메모리에 여러프로그램 올라감 -> Multiprogramming system (다중 프로그래밍)

 

- CPU scheduling : 어떤 식으로 스캐쥴링해야 속도/성능이 더 좋아질 것인가

- 메모리 관리, 보호 : 메모리 관리를 어떻게 해야 다른 영역에 침범하지 않고 또 새로운 프로그램을 넣을 수 있는가? 메모리의 어느 위치에 넣어야할 것인가?

 

4) TSS (Time-sharing system ; 시공유 시스템)

- 강제 절환, interactive system (대화형)

- 가상메모리, 프로세스간 통신, 동기화

더보기
https://choheeis.github.io/newblog//articles/2020-08/OSHistory
https://choheeis.github.io/newblog//articles/2020-08/OSHistory

모니터, 키보드의 출현 -> 컴퓨터와 나의 대화가 가능해짐 (interactive 해짐)

옛날 컴퓨터는 너무 비싸서 여러명이 함께 썻음 -> 하나의 컴퓨터에 여러가지 단말기 연결 (모니터,키보드 등 i/o장치 = Terminal) -> 이러려면 기존의 멀티프로그래밍 방식으로는 불가능함

 

 

- 강제절환 : 타임라인 만들어서 짧은 시간을 나누어, 사용자들의 작업을 스위칭해주며 실행 -> 여러사람의 컴퓨터 동시사용이 가능해짐

https://choheeis.github.io/newblog//articles/2020-08/OSHistory

- 동기화 : 여러명의 프로그램이 동시에 있다보니까, 그 실행 순서를 정해야함

- 가상메모리 : 하드디스크의 일부를 메인메모리인 양 사용할 수 있도록.

 

 

참고) Unix, Linux 는 TSS 기반. 현재 대부분 OS의 기본 원리.

 

 

 


 

OS 기술 천이

 

  • 컴퓨터 규모별 분류
더보기

- 옛날 : Supercomputer > Mainframe (한 컴퓨터에 단말기 여러개) > Mini (단말기 수십개) > Micro (한명만 씀)

- 현재 : 네트워크 환경

           Supercompueter > Server > Workstation > PC > Handheld (핸드폰 태블릿 등...) > Embedded (세탁기, 전기밥솥 등...)

 

  • 고성능 컴퓨터의 OS 기술이 Handheld/ Embedded 까지
더보기

대형 기종을 위해 만들어진 시스템들이, 점차 시간이 지나면서 작은 기종에도 순서대로 적용되기 시작.

 

- Batch processing

- Multiprogramming

- Timesharing

  • 고등 컴퓨터 구조 (Advanced Computer Architectures)

 

 

참고 링크

1. 운영체제 서론

 

운영체제란?  : Operating System

 

운영체제가 없는 컴퓨터는 '야생마'와 같다.

 

참고) 프로그램의 실행 과정

더보기

어떤 프로그램을 실행하기 전, 어떤 명령들(instruction)이 미리 메모리(휘발성 메모리)에 적재됨

 

프로그램 -> (메모리) <-> (프로세스)

 

프로그램 실행과정

프로그램(명령어들의 집합) -> 메모리에 올림 -> 프로세스로 올림

 

 

프로그램을 어떻게 메모리에 올릴까?

프로세스는 하나 뿐인데 어떻게 프로그램이 동시에 실행될 수 있을까?

-> 운영체제 없이는 불가능

 

운영체제란 무엇인가? : 컴퓨터 하드웨어를 관리하는 시스템 (Control program for computer)

컴퓨터에 있는 하드웨어를 잘 관리하여 성능을 높이고 사용자에게 편의성을 제공

 

 

부팅 (Booting)

 

참고) 메인메모리 

더보기

메인메모리 - RAM / ROM 메모리

 

RAM이 대부분, ROM은 적은 부분을 차지

RAM은 휘발성 메모리, ROM은 비휘발성 메모리

RAM은 전원이 꺼지면 메모리가 날아간다. ROM은 컴퓨터 부팅 과정에만 사용된다.

 

참고) 컴퓨터 구조

더보기

프로세서 / 메모리(ROM, RAM) / 디스크

POST (Power-On Self-Test) : 전기를 키면, 컴퓨터의 환경수준이 다 제대로 되어있는가 점거하는 것

부트로더 (Boot loader) : OS를 메인메모리로 로드함

 

부팅 과정

 

1. 프로세스에서 ROM부분의 코드를 제일 먼저 읽어와서 실행한다.

2. 이때 POST를 실행하여 점검한 후, 그 다음 부트로더를 실행하게 됨

3. OS가 메인메모리로 올라간다. (전원이 꺼지기 전까지 메인메모리에 유지됨)

 

 

운영체제의 위치

 

- OS의 구조

 

http://cis2.oc.ctc.edu/oc_apps/Westlund/xbook/xbook.php?unit=04&proc=page&numb=1

OS = Kernel + Shell

 

HW : 하드웨어 자원

Kernel : 실제로 하드웨어(메모리, 디스크)를 관리하는 프로그램

Shell (command interpreter) : OS의 바깥쪽에 위치. 사용자로부터 명령을 받아들여, 이를 해석한 뒤에 해당되는 명령을 실행

Application : OS 위에서 실행되는 응용프로그램. (OS가 관리해주는 대로 하드웨어 자원을 사용)

 

 

OS : 프로세스(cpu) 관리, 메모리(메인) 관리, I/O 관리, 파일(디스크) 관리, 네트워크 관리, 보안 관리

 자원 할당자, 자원 관리자

 

더보기

OS 가 하는 일 vs 정부가 하는 일

부서별 업무, 자원관리, 자원할당 등등...

+ Recent posts