Coding, Filming, and Nothing
article thumbnail

 

1.

Operating System Structure  

 

멀티프로그래밍의 동작 예시

  • Motivation
     단일 사용자가 계속해서 I/O 디바이스와 CPU를 동시에 사용하는 것을 유지할 수 없음 
    -> CPU utilization 을 높이기 위해서 CPU를 쓰지 않을 때 최대한 사용하게 하자

  • 멀티프로그래밍
    • 멀티프로그래밍은 jobs(코드와 데이터)로 구성되어 있는데, CPU는 항상 한 job 밖에 실행하지 못함.
    • 모든 job중에 일부를 메모리에 저장/적재 한다.
    • 하나의 job을 선택해서 실행을 시키는데, 이때 job scheduling에 의해 실행된다.
    • OS는 job이 I/O 등으로 인해 대기해야하면 다른 Job으로 스위칭을 수행한다. 

 

#필기

  1. 멀티프로그래밍의 최초 동기는 CPU Utilization을 높이고자 하는데에서 시작을 했다. CPU가 무의미하게 대기하는 시간에 다른 프로그램을 실행시키는 방식을 채택하는 것이 시초였다. 
  2. job은 쉽게, 프로그램을 나타내는 단위이다. 
  3. total job은 disk에 적재를 해놓는데, disk에 두는 이유는 job이 매우 많은 경우에는 모두를 메인메모리에 수용할 수 없기 때문에 일부를 제외하고 disk에 저장을 해놓는다. 
  4. 그 중에 일부(곧 시작할 것들)를 메모리에 적재를 한다. 
  5. 스위칭을 하는 룰은 멀티프로그래밍의 개념을 생각하면 된다. 결국 CPU를 놀게 하지 않게 위함이 목적이다. 
    1. 또, 멀티프로그래밍은 CPU를 사용 중간에 스위칭하지 않는다. 
    2. 지금은 해당 방법을 사용하지 않고 time sharing(multi-tasking)을 사용한다. 스위칭 속도가 매우 빠르다. 

 

2.

TimeSharing 

 

Timesharing과 job에 대한 동작

  • TimeSharing(multiTasking)
     멀티프로그래밍의 논리적 확장으로, CPU가 주기적으로 job을 바꿔서 실행을 한다. 이때, 유저는 실행되고 있는 각각의 job들이 동시에 돌아가는 것처럼 느낄 수 있다. 
    • 반응시간이 매우 짧아야하는데, 약 1초 이하여야한다. 
    • 각 사용자는 최소한 하나의 프로그램 실행을 메모리해서 한다. 
    • CPU scheduler는 job을 선택해서, 실행을 위한 대기를 시킴 

#필기

  1. Timesharing을 사용하면 모든 프로그램이 동시에 돌아가는 것처럼 느껴진다. 
  2. 이전의 내용과 동일하게, job을 모두 메인 메모리에 적재하기 어려운 경우가 있기 때문에 일부를 제외하고 Disk에 적재한다. 
  3. 메인 메모리에는 곧 실행할 job들을 적재를 하고, CPU에는 실행할 job을 올린다. 
  4. 해당 구조들을 job pool(혹은 job queue), ready job(혹은 ready queue)라고 말한다. 
  5. job pool(disk)에서 메모리로 적재하는 것은 job scheduler에 의해 적재가 이루어지고, CPU로 적재하는 것은 cpu scheduler에 의해 적재가 된다. 각각은 다른 스케쥴러이다. 

 

3. 

Virutal Memory 

메모리 부족 해결 테크닉

  • 메인 메모리는 멀티프로그래밍/멀티테스킹시스템에서 모든 프로세스를 실행하기에 충분하지 않은 문제가 있다.
  • 해결책
    • Swapping
       메모리에 컨텐츠를 넣었다, 뺐다 하면서 실행시킴
    • Virtual memory
       전체가 아닌 일부를 메모리에서 실행이 되게 허용하는 기술

 

#필기

  1. Swapping은 통째(전체 프로세스 단위)로 이루어 진다. 
  2. Swapping에 추가적인 테크닉(더 작은 단위의 블럭으로 소분, 주소 변환기법을 적용)하면 Virtual memory 라고 함 
    1. 더 정확히는, swap block을 더 잘게 쪼개서 멀티테스킹에 필요한 영역만 올리고 실행시키는 것이 VM technic 이다. 

 

4.

Operating System Operations

운영체제의 동작

  • 현대의 운영체제는 인터럽트 제공방식의 프로그램이다.
    • 인터럽트에 의해 이벤트가 표지되며, 인터럽트는 인터럽트핸들러에 의해 처리가 된다. 
    • 여러개의 프로그램이 H/W와 S/W 자원을 공유하고 있다. 
      -> 문제점, 어떠한 프로세스에서 발생한 에러가 전체 시스템의 충돌을 시킬 수가 있음 
  • 다중 사용자 운영체제의 필수요소(조건) : 한 프로그램의 에러는 반드시 다른 프로그램에 영향을 미치지 않아야 한다.
    • Dangerous(priviliged) instructions -> Dual mode operation 
    • Maintaining control over CPU(CPU 독점): 한 사용자의 프로세스의 과하게 긴 실행을 방지 -> Timer 

#필기

  1. 여러개의 프로그램이 컴퓨터의 RSS를 공유하고 있는 상황에서, 한 프로그램에서 일어난 에러가 자원을 공유하고 있는 다른 프로그램 혹은 전체 프로그램에 피해/영향을 입히지 않아야한다. 
  2. 해당 부분은 2가지의 문제가 있는데, 어떠한 한 프로그램이 위험한 명령어를 사용하거나, 혹은 CPU time을 과도하게 사용하는 것이다. 
  3. 위험한 명령어는 dual mode operation을 통해 자격이 있는 mode에서만 해당 명령어가 수행 가능하게 한다. 
  4. CPU 점유 문제는 timer라는 하드웨어 장치-타임키퍼-를 두어 해결을 한다. 
    1. 타임 키퍼는 CPU time에서 시간제한을 해주는 친구이다. (cf, CPU clk와는 다르다.) 
    2. tjfwjd gn interrupt를 날리는 H/W이다. 

 

 

 

5.

Dual-mode Operation 

  • User mode 
    • 유저가 정의한 코드(어플리케이션) 운용
    • 다른 시스템이나 프로그램에 해를 끼칠 수 있는 Privileged 명령어는 보호되어 사용할 수가 없음 
      • I/O 명령어, timer 설정 명령어
      • Priviledged 명령어는 오직 OS sys call을 통해서 해결을 할 수 있다. 
  • Kernel mode (or supervisor, syste privileged) 
    • OS 코드가 운용됨 
    • Priviledged 명령어가 허용이 된다. 

 

#필기

  1. dual mode는 privileged 명령어를 실행할 수 있냐 없냐로 나뉜다. 
  2. 유저모드에서는 안전한 명령어만 실행이 가능하고, Priviledged 명령어를 실행해야하는 경우 오직 sys call을 통해 OS에게 위탁하여 사용을 할 수 있다. 
  3. 더하기, 곱하기, 사칙연산, 메모리 읽기/쓰기 등은 모두 안전한 명령어이다. 잘못된 연산이나 메모리 쓰기가 이루어지는 경우에 하드웨어와 운영체제가 계속 감시하고 있기 때문에 안전하다고 한다. 
  4. Interrupt Handler의 명령은 privileged 명령이기 때문에 mode bit가 0이 되어야 한다. 

 

6.

dual-mode operation의 장점 

  • 모드 위반 에러가 H/W에 의해 감지될 수 있고, OS에 의해 처리될 수 있다. 
    • 시스템 종료 없이 비정상 종료(abnormal termination) 
    • 에러 메세지
    • 메모리 덤프 파일 

#필기 

  1. 덤프는 메모리의 상태를 저장하는 것이다. 디버깅으로 왜 죽었는지 알기 위한 목적을 가지고 있다. 

 

7. 

Timer 

  • 운영체제가 계속해서 CPU의 통제를 유지할 수 있도록 보장해줘야 한다. 
    • 어떠한 사용자 프로그램이 무한루프에 빠지거나, 서비스 도중에 죽어버려서 가져간 권한을 운영체제에 돌려줄 수 없는 경우가 생길 수 있다. 
  • Timer
    • 일정 주기 이후에 컴퓨터에 인터럽트를 보낼 수 있다. 
    • 해당 주기는 고정되거나 유동적일 수 있다.
    • 변동주기 타이머는 보통 고정된 클락 혹은 카운터에 의해 구현이 된다. 
      • 운영체제는 카운터를 설정한다. 
      • 매 시간마다 클럭이 째깍거리고, 카운터가 감소한다.
      • 카운터가 0이 되면, 인터럽트가 발생 

#필기

  1. 타이머는 정말 운영체제에 매우 중요하다. 
  2. 컴퓨터에는 시계가 3개가 있는데 CPU clk, timer, real time clk(진짜 시계)이다. 
  3. 타이머는 일정시간 이후에 인터럽트는 발생시키는 하드웨어 ㅇㅣ다. 
  4. 어떤 프로그램이 실행 중에 무한 루프에 빠져버리면 자발적으로 CPU내놓지 않는 문제가 있다.
  5. Timer를 설정하는 명령은 Privileged 명령이다. 

 

8. 

타이머의 동작 

타이머가 동작하는 원리, 파란색은 프로세스가 타이머 이내에 CPU를 반납한 것이다.

 

  • 프로그램의 과도하게 긴 실행을 방지
    • OS가 유저프로세스에게 컨트롤을 넘기기 전에, 타이머가 설정된 시간 이후에 인터럽트가 발생하도록 설정이 된다
    • 타이머의 인터럽트가 발생하면, 운영체제는 다시 컨트롤을 가져오고, 각 케이스에 대한 처리를 수행한다. 

!! 타임 카운터는 오직 privileged 명령어에 의해만 조정될 수 있다. 

 

#필기 

  1. 이런 과정이 스케쥴러의 시작점이다. 즉, 스케쥴러를 활성화시키는 굉장히 중요한 component가 타이머이다.
  2. 타이머에 의해서 CPU를 뺏긴 프로세서는 저장되어 다음 실행때 끊긴 지점부터 다시 시작한다. 

 

9.

Multi-Mode Operation 

 

  • 인텔프로세서의 경우 4개의 프로텍션 링을 가지고 있다.
    • 0번 링의 경우 커널 모드이고,
    • 1번과 2번링은 드물게 사용되는데, 보통 가상머신 운용에서 사용이 된다.
    • 3번링은 유저모드를 뜻한다. 
  • ARMv8 시스템은 7개의 모드를 가지고 있다.

 

 

 

'무제 메모장' 카테고리의 다른 글

1.5 Core components of OS  (0) 2021.04.11
1.3 Computer System Architecture  (0) 2021.04.09
1.1 Chain of Responsibility Pattern  (0) 2021.04.06
4.1 Socket Communication Test  (0) 2021.04.06
1.2 Computer system organization and operation  (0) 2021.03.16
profile

Coding, Filming, and Nothing

@_안쑤

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!