프로세스와 프로세서 차이 란 무엇일까?
https://aloe-study.tistory.com/167?category=972665
운영체제 기술면접 준비2: 운영체제의 발달 과정, 성능 평가 기준, 구성요소 , 프로세서와 프로세
발달 순서 가장 중요하고 대표적인 몇 가지만 좀더 구체적으로 살펴보자 참고로 발달 과정일 뿐 각 환경마다 다르게 채택하여 사용한다. 1. 일괄 처리(Batch Processing) 시스템 가장 먼저 생겨난 시
aloe-study.tistory.com
이전 시간에 한번 설명 한적 있지만 오늘 스레드를 설명하기 위해 다시 설명하도록 하겠다.
운영체제를 공부하는데 있어 이해해야할 프로세서, 프로세스 개념
사실 나도 전공자이지만 이글을 쓰기 이전까지 정확하게 어떤차이가 있는지 설명 할수 없었다
프로세서와 프로세스는 엄연히 다른 존재
프로세서
하드웨어적 프로세서 개념
Processor (프로세서)는 하드웨어적인 측면에서 "컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛"이다. 이는 중앙처리장치(Central Processing Unit == CPU)를 뜻하며 폰노이만 아키텍쳐에 의해 만들어졌다면 적어도 하나 이상의 ALU (Arithmetic Logic Unit)와 처리 레지스터(Register)를 내장하고 있어야 한다.
소프트웨어적 프로세서 개념 ( 약간 하드웨어적 개념에서 살려는 드릴게 라는 개념으로 보면 된다.)
소프트웨어적으로 프로세서라 함은 데이터 포맷을 변환하는 역할을 수행하는 데이터 프로세싱 시스템(데이터 처리 시스템)을 의미하며 출력 가능한 인쇄물을 생성하는 워드프로세서도 프로세서라 부른다.

조금 애매하긴 합니다만 위의 범주에 포함되는 소프트웨어는 워드프로세서와 컴파일러, 어셈블러 등이 포함됩니다. 프로세서라는 용어의 정의가 명확하게 정의되기 훨씬 이전부터 관습적으로 프로세서라고 부르던 소프트웨어들을 넓은 의미의 프로세서에 포함시켜주는 분위기가 강합니다.
결론적으로 프로세서는 CPU나 Microprocessor 라는 하드웨어를 말하는 것으로 그 범위가 점점 축소되어 명확해져 가고 있습니다.
프로세스란?
프로세스는 말 그대로 "절차(과정)" 입니다. 때문에 스스로 무언가를 처리하지 못합니다.
프로세스는 특정 목적을 수행하기 위해 나열된 작업의 목록이라고 생각하여야 합니다. 즉 프로그램.
컴퓨터에서 프로그램은 프로그래밍 언어로 작성된 작업 수행 과정일 분입니다.
프로그래머가 작성한 소스코드와 소스코드가 컴파일되어 기계어로 번역된 바이너리파일도 그저 작업 과정이 기록된 파일일 뿐임
작업의 과정이 파일로 저장되어 있으면 그것을 "프로그램"이라고 부르고
메모리에 적재되어 실행 중 이거나 실행 대기 중일 땐 "프로세스"라고 구별하여 부를 뿐입니다.
즉 프로세스는 "메모리에 적재되어 프로세서에 의해 실행중인 프로그램" 이라고정의하는 것이 정확할 것입니다.
"프로세서에 의해 실행 중인 프로그램"의 의미를 이해해야 한다.
스레드(thread)란?
스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.
또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.
좀더 세부적으로 알아보자
스레드의 정의
운영체제 내 스케줄러가 CPU에 전달하는 일들 중 하나
스레드: 프로세스의 최소 단위
- • 하나의 프로세스에는 여러 개의 스레드를 구성할 수 있음
- • 경량 프로세스라고도 불림 : 일반 프로세스 보다 작으니
스레드의 장점
- 병행성을 증진 : 프로세스 안 스레드가 여러개 일때 각 스레드를 CPU하나 하나에 독자적으로 할당이 되어 따로 다로 실행 가능 == 하나의 프로세스인데 동시에 여러 영역 처리됨
- 실행 환경을 공유하여 기억 장소의 낭비를 줄임
- 프로세스의 생성 및 삭제 등의 오버헤드 줄임 => 운영체제 성능 개선
- • 문맥교환의 경우 오버헤드 상승
- 자원 공유 : 메모리내 정적 영역 공동활용 : 메모리에 하나의 프로세스 안에서 스레드들이 자원 공유 할 수 있음
- 동일 프로세스환경에서 서로 독립적인 다중 수행이 가능
- 다중 CPU 지원 => 성능 향상
스레드의 종류
- 사용자 수준 스레드
- 커널 수준 스레드
많은 사람들이 이 부분을 햇갈려 하는거 같다 나 또한...
하지만 이해한 내용을 토대로 최대한 알기 쉽게 요약해서 설명해 보겠다.
사실 프로세스안에 스레드는 커널(운영체제 라고 이해하면 쉽다)의 의하여 통제당하며 실제 작업을 진행한다..
커널? 이게 무엇인가?
커널이란?
컴퓨터와 전원을 켜면 운영체제는 이와 동시에 수행된다. 한편 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라가야 한다. 하지만, 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이 때 메모리에 상주하는 운영체제의 부분을 커널이라 한다. 또 이것을 좁은 의미의 운영체제라고도 한다. 즉 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 뜻한다. 이에 반에 넓은 의미의 운영체제는 커널뿐 아니라 각종 시스템을 위한 유틸리티들을 광범위하게 포함하는 개념이다. (보통은 운영체제라고 하면 커널을 말하게 된다.)
다시 본론으로 넘어와서
커널 수준 스레드는 커널 레벨에서 생성되어 관리되는 스레드이고 즉 운영체제가 통제 가능
사용자 수준 스레드는 커널의 통제를 받지 않는 스레드 이다. 즉 운영체제가 통제 불가능 한 영역의 스레드를 의미
다시 세부적으로 정리해보자
그래서 커널 수준 스레드는 커널 레벨에서 생성되는 스레드이다. 운영체제 시스템 내에서 생성되어 동작하는 스레드로, 커널이 직접 관리한다. 커널 수준에서는 프로세스가 주기억 장치에 여러 개가 적재되어 CPU 할당을 기다리며 동작한다.
커널 수준 스레드
- 하나의 사용자 스레드가 하나의 커널 스레드와 연결(1 to 1 모델)
- 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할 수 있음
- • CPU 이용 극대화
- 커널 레벨에서 모든 작업을 지원 => 멀티 CPU를 사용할 수 있음
- 커널의 기능을 사용하므로 보안에 강하고 안정적으로 작동
- 문맥 교환 시 오버헤드 발생 => 느리게 작동
그렇다면 사용자 수준 스레드는?
사용자 수준 스레드는 커널의 통제권을 받지 않는 스레드를 의미한다.
즉 아래 사진처럼 라이브러리 안에 돌아다니는 스레드들을 의미한다.
ex(프로그래머가 어떠한 언어로 함수 같은 것들을 이용하여 작업 한 것들)
다시 말해 라이브러리와 각종 프로 참견러들에 의하여여 통제를 받는 놈들이다.
운영체제의 커널은 직접 통제 하지 못하고 이 라이브러리와 각종 프로 참견러들이 전달해준 결과(스레드)
할당받아 CPU에서 처리한다. == 즉 커널이 직접 통제할 수 없다
사용자 수준 스레드
- 사용자 프로세스 내에 여러 개의 스레드가 커널의 스레드 하나와 연결(1 to N 모델)
- 라이브러리가 직접 스케줄링
- 문맥 교환이 필요 없음
- 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기하게 됨
- 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시에 사용할 수 없음
끝까지 읽어주셔서 감사합니다. 머릿속에 꼭꼭 기억해두자.
참고 자료 + 더 읽어보면 좋은 글들
http://www.tcpschool.com/java/java_thread_concept
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
프로세서와 프로세스의 차이 (processor vs process)
IT 업종에서 일하면서 가끔 프로세서(processor)와 프로세스(process)를 구별하지 못하는 개발자나 엔지니어들을 종종 보게 됩니다. "그게 그거 아니냐.."거나 "구별할 필요가 있냐"라는 생각을 가진
blogger.pe.kr
https://goodmilktea.tistory.com/23
1. 운영체제와 커널이란?
운영체제란? 운영체제는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임입니다. 운영체제
goodmilktea.tistory.com
https://helloinyong.tistory.com/293
[2020.09.16] (운영체제) 사용자 수준 스레드와 커널 수준 스레드의 차이
운영체제 공부 중에 사용자 수준 스레드와 커널 수준의 스레드에 대해 개념이 이해가 되지 않았다. 다른 블로그 글을 찾아봐도 뭔가 애매모호하게 설명하고 말아 버린 느낌으로 받아들여져서
helloinyong.tistory.com