20200122 프로세스와 스레드

NOAH·2021년 1월 22일
0

TIL

목록 보기
8/179
post-thumbnail

호눅스 수업 : 프로세스와 스레드 리뷰

Q&A

우리가 공부하는 방식은 야크쉐이빙 방식이에요. 너무 한번에 하려고 하지마세요~

  • 1ticic = 20ms (1초에 50개 프로그램실행)

  • 멀티쓰레드를 300개 실행하면 성능이 빨라질까요? YES

  • 파이프라인기술 -> CPU는 노는 시간이 생긴다. -> 동시에 두 쓰레드를 돌리자 -> 두가적인 하드웨어(register, pc) 추가 -> 동시에 두개 실행 (intel의 하이퍼쓰레딩 기술)

  • 책 추천 : 리눅스 커널 내부구조

  • VM (Virtual Machine)
    실제물리메모리보다 더큰 메모리를 사용하고 있다는 착각을 일게 합니다.보안적으로 프로세스마다 남의 영역을 침범할 수 없다. 따라서
    운영체제의 목적인 하드웨어를 쉽게 제어할 수 있게 해주고 자원을 보호하는(protection) 하는 것에 부합해요.

PCB

프로세스 제어블록이란 운영체제가시스템 내의 프로세르들을 관리하기 위해 프로세스마다 유지하기 정보들을 담는 커널 내의 자료구조를 뜻한다. PCB는 다음과같은 요소들로 구성 되어 있다.

  • 프로세스 상태(process state)
    : CPU에 할댕해도 되는 지 여부 결정위한 요소
  • 프로그램 카운터(program counter)의 값
    : 수행할 명령의 위치
  • CPU 레지스터(CPU register)의 값
    : 현 시점에서 레지스터에 어떤 값을 저장하였는지
  • CPU scheduling 정보(CPU scheduling information)
    : 메모리 할당을 위해 필요한 정보
  • 메모리 관리 정보(memory management information)
    : 메모리 할당을 위해 필요한 정보
  • 자원 사용 정보(accounting information)
    : 사용자에게 자원 사용 요금을 계산해 정구하는 등의 용도
  • 입출력 상태정보(I/O status information)
    : 프로세스가 오픈한 파일 정보 등

문맥교환(Context switch)

사용자 프로세스로부터 다른 사용자 프로세스로 CPU제어권이 이양되는 과정.

사용자 프로세스가 CPU를 할당받고 실행되던 중에 타이머 인터럽트가 발생하면 CPU제어권은 OS로 넘어가게 된다. 그러면 OS는 Timer interrupt 처리루틴으로 가서 직전까지 수행 중이던 프로세스의 문맥을 저장하고 새롭게 실행시킬 스포세스에게 CPU를 이양한다.

원래 수행 중이던 프로세스는 준비 상태로
새롭게 할당받은 프로세스는 실행 상태가 된다.

문맥 교환 중에 원래 CPU를 보유하고 있던 프로세스는
문맥을 자신의 PCB에 저장하고,

새롭게 CPU를 할당받을 프로세스는 예전에 저장했던 자신의
문맥을 PCB로부터 실제 하드웨어로 복원시키는 과정을 거친다.

호눅스 수업자료

프로세스와 스레드 리뷰

echo "안녕하세요" > hello.txt
pbcopy < hello.txt
pbpaste
say

프로세스 히스토리 살펴 보기

  • 유닉스의 탄생 책 추천
  • joone.net 만화 읽어보기

배치 시스템

  • 입력: 홀러리스의 천공카드 (IBM) 80컬럼 -> 터미널 해상도로 이어짐 -> 권장 코딩 폭
  • 패치: 수정을 위해 붙이는 테이프
  • 출력: 천공카드, 종이테이프, 타자기
  • 프로세스 관리
  • https://www.computerhistory.org/timeline/1952/

CTSS

  • 1960년대 MIT에서 만든 혁신적인 컴퓨터
  • 멀티 유저 로그인
  • Compatitible Time Sharing System

Multics

  • CTSS의 성공으로 만들어짐
  • 너무 복잡해서 실패(?)
  • Time Sharing OS
  • 키보드와 모니터가 달린 컴퓨터

Unix

생각해 보기

  • DOS는 어떤 운영체제인가? 싱글프로세스, 보호가 없기 때문에 OS라 부르기 좀 약한 감이 있다.

프로세스와 스레드

  • 프로세스는 무엇을 추상화 한 것인가? CPU + 메모리. 실행중인 프로그램
  • 스레드는 무엇을 추상화 한 것인가? 프로그램의 실행의 단위. cpu, register, program counter
  • SMT란 무엇인가? 하이퍼스레드란 무엇인가? 물리적 코어를 논리적으로 2개 이상의 코어로 보이게 하는 기술

프로세스 생성하기

  • 시스템콜: 운영체제에서 제공해 주는 API, 주로 하드웨어를 제어하는 기능을 제공
result := fork()
    if result < 0
       #fork() failed
    elseif result > 0
       #this is the Parent
    elseif
       #result=0, this is the Child
       #call exec() to "replace myself" with another prog
       exec()
       #control will Never return here from exec()
       #instead if goes to the new program code
    endif

스레드의 종류

  • 스레드에도 종류가 있나? 유저 레벨 스레드, 커널 레벨 스레드

스레드를 생성하기

  • 스레드는 어떻게 생성하나?
    pthread_create(실행할 함수)
    • 스레드가 하나 만들어진다.
    • 현재 프로세스에 스레드가 하나 추가되는 거죠.
    • 기본적으로 모든 프로세스에는 스레드가 하나 있다: 메인 스레드
  • 스레드 실행의 단위는?
  • join()이란?
    • join() : 자식 프로세스의 종료까지 기다려주는 명령, 리소스 정리하려고
    • pthread_join(): 스레드 종료할때까지 기다려주는 명령
    • 스레드를 실행하고 나면 결과를 받아와서 다른 일을 하겠죠? 그래서 join()이 필요하다.
    • Join() 안하면 무슨 일이 벌어지나? 부모가 먼저 끝날 수 있다. (보통 먼저 끝난다.)

취미코딩

//thread 1
int count = 0;
while (true) {
if (a == 0 && a == 1) {
	//very important code here
	hello("foo");
	break;
}
	count++;
}
//thread2
{
	 a = 0;
	 a = 1;
}

bash shell은 어떻게 동작하는가?

  • 프롬프트 -> 키보드 입력 -> fork() -> exec(입력 명령어) -> 프롬프트

bash shell의 환경변수 살펴보기

과제 함께 보기

  • 시뮬레이터와 에뮬레이터의 차이

프로세스

프로세스(Process)는 CPU가 처리하는 작업(Task)라고도 불리며, 실행중인 프로그램을 의미한다.
좀 더 구체적으로 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제가 관리하는 상태를 의미한다.

프로세스 메모리 구조

## 프로세스 스케줄링 ### 프로세스 상태 생성 -> 준비 -> 실행 <-> 대기 -> 종료까지 크게 5가지 상태가 있다. 프로세스를 생성해서 계속해서 실행하지 않고, 다른 프로세스를 실행하는 동안 대기했다가 다시 실행하는 순서를 반복하게 된다. 스레드 경량 프로세스 Light Weight Process라고 프로세스에서 실행 제어만 분리해서 처리하는 단위를 만들었다. 스레드는 같은 그룹의 스레드와 코드, 메모리 주소 공간, 운영체제 리소스를 공유한다. 프로세스는 하나 이상의 스레드를 가지고 각 스레드는 다음 같은 동작을 담당한다. - 스레드 실행에 대한 상태 관리 - 실행을 위한 별도 스택 - 지역 변수와 스레드 특정 데이터를 저장하는 데이터 저장소 - 프로세스의 메모리와 자원에 대한 접근을 기록하는 컨텍스트 정보 # 특징 - 스레드를 사용하면 사용자에 대한 응답성을 증가시킬 수 있다. - 프로세스 자원과 메모리를 공유할 수 있다. - 자원을 공유하기 때문에 경제적이다. - 다중 프로세서와 다중 스레드를 혼합해서 병렬 실행이 가능하다. - 현대 CPU들은 다중 스레드를 처리하는 하드웨어 로직을 가지고 있다.

1개의 댓글

comment-user-thumbnail
2021년 1월 22일

일주일 동안 고생 많으셨어요~~

답글 달기