1. 동기식 입출력 VS 비동기식 입출력

  • 동기식 입출력
    : I/O 요청에 따른 입출력을 OS가 직접 해주어야 하는데, 이 때 프로세스가 그 시간을 기다려 주는 것
    • 구현방법
      • I/O가 끝날 때 까지 CPU를 낭비시킴
      • 매시점 하나의 I/O만 일어날 수 있음
    • 구현방법2
      • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
      • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
      • 다른 프로그램에게 CPU를 줌
  • 비동기식 입출력(Asynchronous)
    : I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감. 즉 원래 CPU를 받아서 사용하던 그 프로그램이 계속 다른일을 함

 

2. 쓰레드(Thread)

: Thread는 CPU의 수행단위이다. 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다.

  • Thread의 구성
    • program counter
       : 스레드가 현재 실행중인 명령어의 메모리 주소를 저장하는 레지스터이다. 각 스레드는 자신만의 PC를 가진다
    • register set
       : 레지스터 세트는 데이터의 조작 및 처리를 위해 사용된다. 이 레지스터 세트를 이용해 각각 독립 수행이 가능하다.
    • stack space
       : 스택 공간에서는 수행단위로서 존재하는 쓰레드가 함수 호출, 지역 변수 및 임시 데이터 저장등을 위해 사용하는 공간이다.
  • Thread가 서로 공유하는 부분(=Task)
    • code section
    • data section 
    • OS resources
  • 프로세스는 Code, Data, Stack 으로 이루어진 주소공간이 생기고, 이를 관리하기위한  PCB이 생긴다
    • 주소공간에서 Stack부분은 쓰레드의 갯수만큼 각각의 Stack을 가진다

1)쓰레드의 장점

  1. 응답성 : 빠르다. 스레드가 여러개이면 먼저 처리가 끝난 결과를 받아볼 수 있게 된다. 이미지를읽어오는동안 프로세스를 블럭시키는게 아니라, 텍스트를 보여주도록 비동기식 으로 동작하게 된다.
  2. 자원 공유 : 똑같은 일을 하는 CPU수행 단위만 늘렸을 땐, PC, Register, stack을 제외하고는 공유(Task)하기 때문에 자원 낭비가 떨어진다
  3. 경제성 : 좀 더 빠르다? 프로세스를 만든다 → 오버헤드가 크다 but 쓰레드를 늘린다 → 오버헤드가 그렇게 크지는 않다.
    +문맥교환이 일어나는것은 오버헤드가 크지만 CPU내 스레드만 변경하는것은 오버헤드가 그렇게 크지 않다.
  4. CPU가 여러개 일때, 스레드별로 CPU를 할당받아서 작업이 가능해진다. : 각각의 스레드가 각각의 서로 다른 CPU에서 병렬적으로 일을 하게 되면, 빠른 연산이 가능해진다

2) 쓰레드의 구현

  1. 커널 쓰레드 : 쓰레드가 여러개 있다는 사실을 운영체제 커널 쓰레드가 알고 있다. 한개의 쓰레드에서 다른 한개의 쓰레드로 CPU가 넘어가는 것도 커널이 CPU 스케쥴링처럼 넘겨주는 것
    Ex) Window 95,98, Solaris, Digital UNIX
  2. 라이브러리 쓰레드 : 프로세스 안에 여러개의 쓰레드가 있다는 것을 커널은 모르고 유저레벨 쓰레드가 알아서 관리하는 것이다. 커널이 봤을 땐 일반적인 프로세스처럼 보이지만, 실제로는 쓰레드가 나뉘어져 있다.
    Ex)  POSIX Pthreads, Mach C-Threads, Solaris threads

'OS' 카테고리의 다른 글

#2. Process  (0) 2023.04.13
#1.2 System structure & Program execution  (0) 2023.04.11
#1. System structure & Program executio  (0) 2023.03.29
#0. Introduction to Operating Systems  (0) 2023.03.27

OS에 관한 포스팅은 이화여자대학교 반효경 교수님의 수업을 수강하여 정리한 내용임을 밝힙니다.

 

1. 프로세스의 개념

  • 프로세스란 실행중인 프로그램
  • 프로세스의 문맥(Context)
    • CPU 수행 상태를 나타내는 하드웨어 문맥
      • Program Counter : 사용자 프로그램의 코드를 읽어온다
      • Register : Instruction읽어오면 레지스터에 값을 넣고 산술논리연산장치를 통해 연산을 한다
    • 프로세스의 주소공간
      • Code 명령어의 집합이며 프로그램이 메모리에 로드될 때 생성된다. 한개씩 실행된다
      • Data 프로그램 실행시 생성되며,  전역변수 정적변수등이 포함된다.
      • Stack   함수의 호출과 리턴에 관한 데이터를 저장함. 지역변수와 매개변수 관리
    • 프로세스 관련 커널 자료구조
      • Data : 사용자 프로그램A의 PCB (CPU를 얼마나 줄지, 메모리는 얼마나 줄지 관리함)
      • Stack : A의 커널 스택

 

2. 프로세스의 상태

  • 프로세스 상태(State)가 변경되며 수행된다.
  • 종류
    • Running : CPU를 잡고 실행중인상태
    • Ready : CPU만 오면 GO!
    • Blocked : 
      • CPU를 줘도 Instruction을 수행할 수 없는 상태
      • Process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태
      • ex) 디스크에서 file을 읽어와야하는 경우
    • New : 프로세스가 생성중인 상태
    • Terminated : 수행(execution)이 끝난 상태

Process state diagram

  • 동작방식
    1.  운영체제 커널이 I/O queue 요청을 함(running -> waiting)
    2. 키보드 입력 완료
    3. I/O controller가 CPU에게 Interrupt 전달
    4. CPU 동작을 정지 한 후, OS에게 간 이후에 프로그램 상태 변경 (waiting -> ready)

 

3. PCB

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
  • 다음의 구성요소를 가진다
    1.  OS가 관리상 사용하는 정보
      • Process state, Process ID
      • scheduling information, priority
    2. CPU 수행 관련 하드웨어 값
      • Program Counter
      • Register's
    3. 메모리 관련
      • Code, data, stack의 위치정보
    4. 파일 관련
      • Open file descriptor
       

PROCESS CONTROL BLOCK

4. 문맥 교환 (Context Switch)

  : CPU는 빠른자원으로 한 프로세스가 계속 독점하는게 아니라, 썼다 안썻다를 반복하는데, 뺏긴 시점의 문맥을 기억하고 있어야 다시 시작할 때, 그 문맥에서부터 이어서 할 수 있다. 그래서 CPU에 있는 PC(program counter)와 Register값들을 계속 바꾸는 행위를 하게된 것이다. 이런 문맥교환은 캐쉬메모리의 내용을 전부 지워야하므로 오버헤드가 큰 편이다.

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
  • System Call이나 Interrupt 발생시 반드시 Context Switch가 발생하는것은 아니다
    • 사용자 프로세스 A -> Kernel Mode : 문맥교환이 일어난 것은 아니다
    • 사용자 프로세스 A -> Kernel Mode -> A blocked -> 사용자 프로세스 B : A에서 B로 문맥교환이 일어났다

 

5. 스케줄러

  • Long term scheduler (장기 스케줄러 or Job 스케줄러)
    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정 : new -> ready로 넘어가는 admitted과정
    • 프로세스에 memory를 주는 문제
    • degree of Multiprogramming 을 제어 : 메모리의 프로세스의 수를 관리
    • time sharing system 에는 보통 장기 스케줄러가 없음(무조건 ready)
  • Short-term scheduler ( 단기 스케줄러 or CPU 스케줄러)
    • 어떤 프로세스를 다음번에 running시킬지 결정
    • 프로세스에 CPU를 주는 문제
    • 충분히 빨라야함 (millisecond)
  • Medium-term scheduler(중기 스케줄러 or Swapper)
    • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄(Suspended상태가 된다)
    • 프로세스에게서 memory를 뺏는 문제
    • degree of Multiprogramming 을 제어

'OS' 카테고리의 다른 글

#2.2 Process  (0) 2023.05.04
#1.2 System structure & Program execution  (0) 2023.04.11
#1. System structure & Program executio  (0) 2023.03.29
#0. Introduction to Operating Systems  (0) 2023.03.27

OS에 관한 포스팅은 이화여자대학교 반효경 교수님의 수업을 수강하여 정리한 내용임을 밝힙니다.

 

인터럽트의 종류

  • 하드웨어 인터럽트 : I/O device 에서 발생하는 인터럽트로 예시로는 마우스나 키보드 입력이 될 수 있다.
  • 소프트웨어 인터럽트 : 소프트웨어 (프로세서)에서 발생하는 인터럽트로 시스템콜, 예외 상황이 있다.
  • 타이머 인터럽트 : 정해진 CPU할당시간이 지난 경우 발생하는 인터럽트로, 다른 사용자 프로그램에 CPU가 할당된다.

소프트웨어  인터럽트의 발생과정(Simplified)

  • I/O device 에 작업 요청에 따른 인터럽트 발생 
  • CPU modebit이 0이 되어 커널모드가 됨
  • 커널 내부에 인터럽트 벡터가 있고, 그 벡터엔 해당 인터럽트가 어떤 인터럽트인지 알 수 있는 엔트리가 있음
  • 인터럽트 서비스 루틴에 따라 요청을 처리함

What is 프로그램 카운터 레지스터?

 : CPU가 현재 실행중인 명령어의 위치를 가리키는 레지스터이다. CPU는 이 레지스터의 값을 읽어와서 해당 위치의 명령어를 읽어와 실행합니다

 

동기식 입출력과 비동기식 입출력

동기식 입출력

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에게 넘어감
  • 구현방법 1
    • I/O가 끝날 때까지 CPU를 낭비시킴
    • 매시점 하나의 I/O만 일어날 수 있음
  • 구현 방법 2
    • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼았음
    • I/O 처리를 기다리는 줄에 그 프로그램 줄을 세움
    • 다른 프로그램에게 CPU를 줌

비동기식 입출력

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

 

DMA (Direct Memory Access)

DMA

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block단위로 인터럽트를 발생시킨다

필요한 이유

  : 원래는 device controller에 직접 접근하는 것은 CPU만 하는데, 인터럽트가 너무 자주 발생해서 그것을 처리하기 위한 오버헤드가 점점 커진다 → 대신 같이해줄 친구를 구했음 → Direct Memory Access가 버퍼에있는 내용을 메모리로 카피를 한다.

 

Memory Mapped I/O

개념

 : Memory Mapped I/O 면 입출력 장치와 메모리 간의 데이터 전송이 일반적인 메모리 접근과 같은 방식으로 처리되도록 한다.  즉 CPU는 입출력 장치를 다루기 위해 별도의 입출력 명령을 사용할 필요가 없이, 메모리에 접근하는 것과 같은 방식으로 입출력 장치에 접근 할 수 있게 된다

 

장점

: 입출력 장치와 메모리 간의 데이터 전송 속도를 높이는 장점이 있다. 또한, 입출력 장치가 메모리와 같은 방식으로 다뤄지기 때문에 입출력 장치의 주소를 다루는 복잡한 로직을 구현할 필요가 없어지게 된다.

 

단점

: 입출력 장치와 메모리가 동일한 주소 공간을 공유하기 때문에 충돌 문제가 발생할 수 있게 된다. 또한, 입출력 장치가 메모리와 같은 방식으로 다뤄지기 때문에 입출력 장치의 동작과 관련된 레지스터나 제어 신호가 메모리에 노출될 수 있으므로 보안에 취약할 수 있는 단점이 있다

 

저장장치 계층 구조

  : 위에 있을 수록 Speed가 빠르고, Cost와 Volatility가 높다

  1. Primary (Executable)
    1. Register
    2. Cache memory
    3. memory
  2. Secondary
    1. Magnetic Disk
    2. Optical Disk
    3. Magnetic Tape

 

프로그램의 실행(메모리 load)

  1. File System(보조기억장치)에 있는 실행파일 A, B를 가상메모리에 load 한다
  2. 가상메모리 구성
    1. stack: 함수의 호출과 반환에 관한 데이터를 저장하며, 스택프레임에 매개변수, 지역변수 등을 저장한다
    2. data: 프로그램의 실행에 사용되는 전역 변수, 정적변수, 초기화된 데이터 등을 저장하는 메모리 영역이다. 프로그램이 실행될 때 생성된다
    3. code: 명령어를 저장하는 역할이며, CPU가 한개씩 실행한다. 실행파일이 메모리에 로드될때 생성된다.
    +가상메모리를 사용하는 이유
    1. 가상의 메모리를 사용하면, 사용하지 않는 메모리를 따로 할당하지 않아도 되므로 메모리 사용의 효율성을 높인다
    2. 가상의 주소는 프로그램마다 다르기 때문에, 여러 프로그램이 동시에 실행될 때 발생할 수 있는 충돌을 방지할 수 있다.
  3. AddressTranslation : 가상 메모리를 실제 물리 주소로 변경한다

 

커널 주소 공간의 내용

code

  • 시스템 콜, 인터럽트 처리코드
  • 자원 관리를 위한 코드
  • 편리한 서비스 제공을 위한 코드

Data

  • 각 하드웨어마다 관리하기 위한 자료구조를 가지고 있음
  • 현재 실행중인 프로그램을 관리하기 위한 자료구조가 필요하다 : PCB (process control block)
  • CPU
  • mem
  • disk
  • ProcessA 의 PCB
  • ProcessB 의 PCB

stack

  • 각 사용자 프로그램이 운영체제 커널의 코드를 불러서 실행시킬 수 있다. (함수호출 발생 → 사용자 프로그램마다의 커널 스택에 접근)
  • ProcessA의 커널 스택
  • ProcessB의 커널 스택

What is PCB?

PCB(Process Control Block)는 프로세스에 대한 정보를 저장하고 있는 운영체제의 자료 구조이다. 

PCB는 운영체제가 프로세스를 관리하고 제어하기 위해 필요한 정보를 저장합니다. 예를 들어, PCB에는 프로세스 식별자, 프로세스 상태, CPU 레지스터 값, 프로세스 우선순위, 프로세스 자원 요구사항 등의 정보가 저장된다. 이러한 정보는 프로세스가 실행될 때 CPU에 의해 처리되므로, 프로세스가 중단되거나 재개되는 경우에도 유지된다.

PCB는 프로세스의 생성부터 종료까지의 모든 단계에서 사용된다. 새로운 프로세스가 생성될 때는 새로운 PCB가 생성되고, 프로세스가 종료될 때는 PCB가 삭제됩니다. PCB는 운영체제가 프로세스를 관리하기 위한 핵심 자료구조 중 하나다.

 

'OS' 카테고리의 다른 글

#2.2 Process  (0) 2023.05.04
#2. Process  (0) 2023.04.13
#1. System structure & Program executio  (0) 2023.03.29
#0. Introduction to Operating Systems  (0) 2023.03.27

OS에 관한 포스팅은 이화여자대학교 반효경 교수님의 수업을 수강하여 정리한 내용임을 밝힙니다.

 

컴퓨터 시스템 구조

CPU + Memory ⇒ Computer

메모리는 CPU의 작업공간이며 얘랑 만 논다, CPU 는 매 클럭마다 메모리에서 Instruction을 읽어온다.

 

 

Mode Bit

  : 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치이다

  • 1 사용자 모드 : 사용자 프로그램 수행
  • 0 커널 모드 : OS코드 수행 (interrupt가 왔을때 되는 상태 or 프로그램 정상종료 후)

Timer

  : 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴

 

! 무한루프를 돌게되는 프로그램에 CPU가 들어가게 되면 계속 CPU가 다른 프로그램으로 못넘어가게 된다.
Timer : 운영체제가 CPU를가지고 있다가 사용자프로그램에게 CPU를 넘겨주는데 그냥 넘겨주는게 아니라
→ Timer에게 할당된 시간 만큼 CPU를 넘겨준다. → 넘겨받은 시간만큼 instruction을 실행한다.
→ 세팅된 시간이  끝나면 interrupt를 보낸다 || 정상종료시 CPU를 반납한다.

 

I/O device Controller

 : I/O device를 전담하는 하드웨어 컨트롤러이다.

  • 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
  • 제어 정보를 위해 control register, status register를 가짐
  • local buffer를 가짐(일종의  data register)
  • device driver : OS 코드 중 장치별 처리루틴 Software이다.
    • 각 하드웨어에 맞는 인터페이스가 따로 있고, OS에게 device driver를 넘겨주면 그 인터페이스에 맞춰서 한다.
    • 이와는 조금 다른 discfirmware는 하드웨어의 instruction code를 가지고 있다.
  • device controller : 각 장치를 통제하는 일종의 작은 CPU인 hardware이다.

동작방식

  • 사용자 프로그램은 직접 I/O에 접근이 불가능하기 시스템 콜을통해  OS에게 device I/O작업을 요청
  • 운영체제에 요청하기 위해서는 소프트웨어적으로 직접 interrupt를 하는 trap을 사용하여 interrupt vector의 특정 위치로 이동
  • Interrupt발생은 CPU의 다음  instruction의 수행을 막고 interrupt service routine으로 이동
  • 요청을 device controller에게 전달 후 그 작업결과는 local buffer에 저장한다.
  • 작업이 완료되었다는 Hardware Interrupt가 CPU에 걸린다.
  • OS 코드 수행하는 CPU는 local buffer에 가서 마무리된 작업을 복사하여 사용자 프로그램에게 전달한다.

 

Interrupt

  • Interrupt(Hardware) : 하드웨어가 발생시킨 인터럽트(ex I/O)
  • Trap(Software)
    • Exception: 프로그램이 오류를 범한 경우
    • System call : 프로그램이 커널 함수를 호출하는 경우
  • Interrupt vector: 해당 인터럽트의 interrupt service routine 의 주소 를 가지고있음
  • Interrupt Service Routine : 해당 인터럽트를 처리하는 커널 함수

 

'OS' 카테고리의 다른 글

#2.2 Process  (0) 2023.05.04
#2. Process  (0) 2023.04.13
#1.2 System structure & Program execution  (0) 2023.04.11
#0. Introduction to Operating Systems  (0) 2023.03.27

OS에 관한 포스팅은 이화여자대학교 반효경 교수님의 수업을 수강하여 정리한 내용임을 밝힙니다.

 

운영체제란?

컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층을 뜻한다.

  • 좁은 의미의 운영체제 : 커널 이라고 부르며 운영체제의 핵심으로 메모리에 상주하는 부분 (개발자의 입장)
  • 넓은 의미의 운영체제 : 커널 + 주변 유틸리티 들을 포함하여 이야기한다

운영체제의 목적

컴퓨터 시스템의 하드웨어 자원을 효율적으로 관리하게 해준다. 또 사용자로 하여금 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다.

  • 프로세서, 기억장치, 입출력장치 (CPU, Memory, I/O)등의 효율적 관리.
  • 사용자 및 운영체제 자신의 보호
  • 프로세스, 파일, 메시지 등을 관리

운영 체제의 분류

1. 동시 작업 가능 여부

  • 단일 작업(Single Tasking) : 한번에 하나의 작업만 처리 ex) MS-DOS
  • 다중 작업(Multi Tasking): 동시에 두 개 이상의 작업 처리하여 한 명령의 수행이 끝나기 전 다른 명령을 수행할 수 있다. ex) UNIX, Windows 

2. 사용자의 수

  • 단일 사용자(Single user)  : MS-DOS, MS windows
  • 다중 사용자(multi user) : UNIX, NT server

3. 처리 방식

  • 일괄 처리(Batch Processing)
    • 작업 요청의 일정량을 모아서 한번에 처리
    • 작업이 완전 종료될 때까지 기다려야함
      ex) 과거 동사무소 직원에게 등본 요청 -> 작업량이 일정이상 쌓이기 전까지 시작하지 않음
  • 시분할 (Time sharing)
    • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
    • 일괄 처리 시스템에 비해 짧은 응답시간을 가짐
    • Interactive : 화면에 입력하는 순간 바로나옴
    • 현재 대부분은 시분할 작업이다
  • 실시간(Realtime OS)
    • 데드라인 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간 시스템을 위한 OS
    • EX) 원자로/공장제어, 미사일 제어, 반도체 장비
    • Hard realtime system : 시간을 꼭 지켜주어야하는 시스템
    • Soft realtime system : 

4. 용어정리

  • Multiprogramming : 여러 프로그램이 메모리에 올라가 있음을 강조
  • Time sharing: CPU시간을 분할하여 나누어 씀을 강조
  • Multiprocessor : 하나의 컴퓨터에 CPU가 여러개 붙어있음을 강조

5. 운영체제의 예

  • 유닉스
  • DOS
  • MS Windows

운영 체제의 구조

  1. CPU : 누구한테 CPU를 줄까?
    -> CPU scheduling

  2. Memory : 한정된 메모리를 어떻게 쪼개어 쓰지? 
    -> 메모리 관리

  3. Disk : 디스크에 파일을 어떻게 보관하지
    -> 파일 관리

  4. I/O Device: 각기 다른 입출력 장치와 컴퓨터간에 어떻게 정보를 주고받게하지?
    -> 입출력 관리

  5. 프로세스관리
    • 프로세스의 생성과 삭제
    • 자원 할당 및 반환
    • 프로세스 간 협력

 

'OS' 카테고리의 다른 글

#2.2 Process  (0) 2023.05.04
#2. Process  (0) 2023.04.13
#1.2 System structure & Program execution  (0) 2023.04.11
#1. System structure & Program executio  (0) 2023.03.29

+ Recent posts