학습요약18>16강 운영체제7~15

개프꼬·2023년 2월 16일
0

※블로그 내용은 저 '개인'의 기준으로 더 필요하다고 생각되는, 또는 한번 더 짚어보는 의미로 대부분 직접 필기한 것입니다. 수희 혼자 볼라고 쓴 블로그

7. 운영체제 스케쥴링 기본1

  • 시분할 시스템: 다중 사용자 지원을 위해 컴퓨터 응답 시간을 최소화하는 시스템. 여러사용자가 동시에 하나의 컴퓨터 쓰려면?다중 사용자 지원.
    배치처리 시스템을 보완한다!

  • 멀티 태스킹: 단일 cpu에서 여러 응용프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템. mp3음악 들으며 문서 작성하는것..


8. 운영체제 스케쥴링 기본2>

  • 멀티 프로그래밍: 최대한 cpu를 일정 시간당 많이 활용하도록 하는 시스템
    응용 프로그램은 cpu외 다양한 하드웨어 사용(파일 읽기)

  • 메모리 계층(컴퓨터 구조 이해)

  • 멀티 태스킹: 단일 cpu

멀티 프로세싱:

여러 cpu에 하나의 프로그램을 병렬로 실행해서
실행속도를 극대화 시키는 시스템.(스레드 개념)

프로그램 성능을 높이는 방법: 가능한 메모리 상에서 실행하도록 해야함(redis, scala)


9. 스케쥴링 알고리즘 구현 이해1>기술면접 단골★

  • 프로세스 구조에 대한 설명: 디버깅 관련 /
  • 컨텍스트 스위칭에 대한 설명: OS,컴픂터 구조 ,내부cpu /
  • 프로세스간에는 어떻게 통신하는지 설명: 프로그래밍 기능 /

스케쥴러 :

프로세스를 실행은 운영체제>운영체제 안에 커널>커널에서 스케쥴러가 프로세스를 관리를 한다.

스케쥴링 알고리즘> 시분할 시스템, 멀티 프로그래밍.

  • FIFO 스케쥴러> 프로세스가 저장매체를 읽는 다든지, 프린팅을 하는 작업 없이,
    쭉 cpu를 처음부터 끝까지 사용. 가장 간단한 스케쥴러(배치 처리 시스템)
    FCFS(First Come First Served) 스케쥴러 / Queue 자료구조.

최단 작업 우선(SJF) 스케쥴러>

가장 프로세스 실행시간이 짧은 프로세스부터 먼저 실행시키는 알고리즘.

  • 자료구조와 알고리즘에 익숙한 상태라면, 좋은 개발자는 분명히 최소한 우선순위
    큐와 힙 자료구조 사용을 고려할 것임(시간 복잡도가 O(nlogn)임)
  • 스케쥴러는 운영체제 핵심기능으로 빈번하게 호출 되므로, 스케쥴러 알고리즘은 운영체제 성능에 큰 영향을 미침.
  • 왜 자료구조와 알고리즘이 필요한지, 코테를 왜 보는지 이해할 수 있다.


    RTOS(RealTime OS): 응용 프로그램 실시간 성능 보장을 목표로 하는 OS
  • 정확하게 프로그램 시작,완료 시간을 보장
  • 하드웨어 RTOS, 소프트웨어 RTOS
    General Purpose OS(GPOS): 프로세스 실행시간에 민감하지 않고,
    일반적인 목적으로 사용되는 OS(윈도우나 리눅스 등)

우선순위 기반 스케쥴러(대표적인 알고리즘 중 하나) >

  • Priority-Based 스케쥴러:
    정적 우선 순위 / 프로세스마다 우선순위를 미리 지정.
    동적 우선 순위 / 스케쥴러가 상황에 따라 우선순위를 동적으로 변경

10. 스케쥴링 알고리즘 구현 이해2>

Round Robin 스케쥴러(시분할 시스템)
프로세스 상태 기반 스케쥴러(멀티 프로그래밍.):
(프로세스 생성-실행가능-실행중(불가시 대기)-종료

  • 스케쥴러는 마우스 끊킴 등 랙을 해결해야됨.
    최근 리눅스 스케쥴러: O(1)(입력이 몇개든 간에 동일한 실행시간을 가지는 알고리즘) 와 같이 보다 효율적인 알고리즘을 사용 중.

  • 현업 프로그램은 성능에 민감하다. 대용량 서비스..
    성능을 위해 당신의 프로그램이 IO-bound냐, CPU-bound냐 체크.
    IO-bound : IO 관련 기능이 주로 사용하는 프로그램
    CPU-bound : cpu / 메모리를 주로 사용하는 프로그램


11. 프로세스 구조 이해>

프로세스 구성(디버깅 이해에 필요) :

text(CODE): 코드 0101010~~~ +
data: 변수/초기화된 데이터 +
stack: 임시 데이터(함수 호출, 로컬 변수 등) +
heap: 코드에서 동적으로 만들어지는 데이터

  • 프로세스와 컴퓨터 구조 :
    PC(Program Counter)다음 실행할 코드 주소 + SP(StackPointer)스택 최상단 주소
    임베디드 시스템에서 동작하는 C프로그램 등은 디버깅시 PC와 SP를 캡쳐해서 확인

  • 파이썬에서 재귀함수 호출이 일정 횟수 이상이면 '고정된 스택 공간 때문에' 에러가 남
    파이썬도 객체이다.


12. 힙과 컨텍스트스위칭 이해>

Heap이란?

(c언어에 대해 잘알면 이해 쉽다)

JAVA GC가 필요한 이유:

  • 불필요한 객체가 차지하는 힙 공간을 삭제하여, 힙 공간 확보가 필요
  • 만약 힙공간이 부족하면? 객체 생성이 불가능,
  • JAVA와 같은 객체지향 프로그램은 동작 하지 않게 됨.


    컨텍스트 스위칭이란?
    Context Switching, 컨텍스트 스위칭, 또는 문맥 교환
    cpu에 실행할 프로세스를 교체하는 기술.
    PC, SP만 바꿔주면 프로세스 저장상태를 기반으로 실행 가능


    컨텍스트 스위칭 세부동작: 프로세스1 PCB정보를 메인 메모리에 저장.
    PCB정보(PC, SP)를 cpu의 레지스터에 넣고 실행.
    프로세스2 PCB정보를 메인메모리에서 로드함.


    Process Control Block(PCB) : 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장
    PCB에 process ID, Register (PC, SP 등) 등의 프로세스 정보저장.


    윈도우/맥 등의 태스크 매니저에서 PID 찾아보기
    리눅스 등에서 프로세스를 제어하는 명령은 PID를 기반으로 사용 ex ) kill-9 PID

13. 멀티 프로세스와 IPC 이해

프로세스간 커뮤니케이션(InterProcess Communication) IPC

★IPC는 프로세스간 통신 방법을 제공.

대부분의 IPC 기법은 결국 커널 공간을 활용하는 것임.
이유: 커널 공간은 공유하기 때문

프로세스는 다른 프로세스의 공간을 접근할 수 없다.★프로세스간 공간이 분리되있음.
그래서 IPC 필요해.
스레드는 프로세스 간의 접근가능 / 프로세스는 접근 불가능


실제 프로세스: 리눅스 예시 (가상 메모리)
-커널 공간은 공유한다 / 어떤 프로세스나 O ~4GB까지의 메모리 주소를 가짐


다양한 IPC 기법 : file 사용 /★message queue /★shared memory /★pipe / signal /
semaphore / socket ... ★표시는 모두 커널 공간을 사용하는 것


c언어를 배워야함. JAVA, 파이썬 등은 사용자가 더 쉽게 개발할 수 있도록 만든 언어.
그만큼 컴퓨터 동작 이해가 부족해도 프로그램 구현이 가능.
현업에서도 C++ 등 언어를 사용하는 경우가 많음.
c언어 배우고 프로그래밍 하려면 IPC함수, 메모리 직접 제어 기능 등을 이해하고
사용해야 하므로, c언어를 모르는 개발자와는 더 깊은 레벨의 이해가 가능함.


14. 운영체제와 프로세스 동작 정리>

1~14번 내용 총 정리. 한장의 그림으로 표현 @_@) 한번 더 봐보자★


15. 스레드 개념 이해>

★기술면접~

본 챕터 목표: 다음 단골 CS지식 문항에 대해 구체적으로 이해,답변 준비
1. 프로세스간에는 어떻게 통신하는지, 스레드와 비교해서 설명
2. 프로세스와 스레드의 차이점에 대해 설명
3. 언제 멀티 프로세스를 사용하고 언제 멀티 스레드를 써야하는지 설명
4. 스레드 동기화란 무엇이며 왜 사용하는지 예시를 설명
5. 뮤텍스와 세마포어의 차이점을 설명
6. 현업, IT 기술과 컴퓨터공학이 어떻게 쓰이는지도 수시로 설명드립니다.



Thread(스레드) . Light Weight Process라고도 함.
프로세스 : 프로세스 간에는 각 프로세스의 데이터 접근이 불가 (4개영역)
스레드: 하나의 프로세스에 여러개의 스레드 생성 가능(자기만의 영역1개)
스레드들은 동시에 실행 가능
프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능.
스레드는 각기 실행이 가는한 stack이 존재.나머지는 공유.


멀티 스레드: 소프트웨어 병행 작업 처리를 위해 멀티 스레드를 사용함.

대부분의 프로그래밍 언어에서 중급 이후 과정에서는 반드시 나오는 기술이 스레드 프로그래밍 기법. 예시) java언어에서도 스레드 프로그래밍 기법은 많이 사용 되는 기술.
멀티 프로세스와 멀티 스레드 프로그래밍은 성능 개선을 위해 기본적으로 고려하는 구조.
최근 cpu는 멀티 코어를 가지므로, 스레드를 여러개 만들어, 멀티 코어를 활용도를 높임.

최근에는 짧은 반응 시간이 우선이기 때문에, 성능 개선에 신경을 많이 쓰므로 멀티 프로세스 or 멀티 스레드를 고려함.
멀티 프로세스보다 스레드를 자연스럽게 더 많이 사용함.
이유는 멀티 프로세스는 처음 구조를 잡을때 만들어야 하지만,
스레드는 프로그램의 일부 동작에서만 사용하도록 일부 코드 수정으로 가능해서.

profile
개발자_프론트엔드_꼬리에 꼬리를 무는 호기심

0개의 댓글