1.개요(Overview)

-응용체제는 다중 프로세스를 포함하는 특성을 제공한다. 

-스레드는 CPU 이용의 기본 단위이다.

-스레드는 스레드 ID, 프로그램  카운터, 레지스터 집합, 그리고 스택으로 구성된다.

-스레드는 같은 프로세스에 속한 다른 스레드와 운영체제 자원들을 공유한다. 

-밑의 그림은 단일 스레드 프로세스와 다중 스레드 프로세스의 차이점을 보여주고 있다.

Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.170



1-1.동기(Motivation)

-스레드가 대중화되기 전에는 요청마다 별개의 프로세스를 생성하는 것이 보편적이었다. 예를 들어, 웹 서버에 여러 클라이언트가 서비스 요청을 하면 서버는 그 요청을 실행할 프로세스를 생성했다. 하지만 프로세스 생성 작업은 매우 많은 시간을 소비하고 많은 자원을 필요로 한다. 하지만 새 프로세스가 할 일이 기존 프로세스가 하는 일과 동일하다면 프로세스 안에 여러 스레드를 만들어 나가는 것이 더 효율적이다. 


1-2.장점(Benefits)

a.응답성(responsiveness): 사용자에 대한 응답성을 증가시킨다. 

b.자원 공유(resource sharing): 프로세스는 공유 메모리 또는 메시지 전달 기법을 통해서만 자원을 공유할 수 있다. 그러나 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 

c.경제성(economy): 프로세스보다 메로리와 자워 할당하는 비용이 적다. 

d.규모 가변성(scalability): 다중 처리기 구조에서 각각의 스레드가 다른 처리기에서 병렬로 처리 가능


1-3.다중코어 프로그래밍

-다중코어 시스템에서 프로그래밍 시 생각해야 할 이슈

a.작업 나누기 b.균형 c.데이터 분석 d.데이터 종속성 e.시험 및 디버깅


2.다중 스레드 모델(Multithreading Models)

-스레드는 사용자 수준에서 제공되는 사용자 스레드와 커널 수준에서 제공되는 커널 스레드가 있다. 

이 두 스레드는 일반적으로 3가지 방법으로 제공된다. 


2-1.다대일 모델(Many-to-One Model)

-효율적이긴 하지만 한 스레드가 봉쇄형 시스템 호출을 할 경우 전체 프로세스가 봉쇄된다.

Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.174


2-2.일-대-일 모델(One-to-One Model)

-다대일 모델보다 더 많은 병렬성을 제공한다. 

-단점은 사용자 수준 스레드 생성시 그에 따른 커널 스레드를 생성해야 한다는 점이다.

Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.174


2-3.다-대-다 모델(Many-to-Many Model)

-다대일 모델은 한번에 하나의 스레드만이 커널에 의해 스케줄되기 때문에 진정한 동시성을 획득할 수 없다. 

-일대일 모델은 개발자가 한 응용내에 너무 많은 스레드를 생성하지 않도록 주의해야한다. 

-다대다 모델은 위의 2가지 문제점을 어느 정도 해결했다. 

Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.175



3.스레드 라이브러리(Threads Library)

-스레드 라이브러리는 프로그래머에게 스레드를 생성하고 관리하기 위한 API를 제공한다. 

-스레드 라이브러리를 구현하는 데에는 주된 두 가지 방법이 있다. 

a.커널의 지원 없이 완전히 사용자 공간에서만 라이브러리를 제공

b.운영체제에 의해 지원되는 커널 수준 라이브러리를 구현하는 것이다. 

-현재 a.POSIX Pthreads b.win32 c.JAVA의 세종류 라이브러리가 주로 사용된다. 이 중에서 JAVA 스레드 라이브러리를 이용한 기본적인 스레드 생성에 대한 내용만 정리해 보았다. 


3-1.JAVA(JAVA Threads)

-스레드는 JAVA 프로그램의 프로그램 실행의 근본적인 모델이고 JAVA 언어와 API는 스레드의 생성과 관리를 지원하는 풍부한 특성을 제공한다. 모든 JAVA 프로그램은 적어도 하나의 단일 제어 스레드를 포함하고 있다. 

-JAVA프로그램에서 스레드를 생성하는 기법에는 두 가지가 있다. 

a.Thread 클래스로부터 파생된 새로운 클래스를 생성하고 Thread 클래스의 run()메서드를 무효화(Override)하는 것이다. 

b.Runnable 인터페이스를 구현하는 클래스를 정의하는 것이다. 

Runnable 인터페이스는 다음과 같이 구현한다. 

public interface Runnable

{    

public abstract void run();

}

run() 메서드를 구현하면 별도의 스레드로서 실행된다.

-Thread 객체를 생성하는 것은 구체적으로 말하면 새로운 스레드를 생성하는 것은 아니다. 오히려, 새로운 스레드를 실제로 생성하는 것은 start()메서드이다. start메서드를 호출하면 다음과 같은 두가지 작업을 실행한다. 

a.메모리가 할당되고, JVM 내에 새로운 스레드가 초기화된다. 

b.run() 메서드를 호출하면 스레드가 JVM에 의해 실행대로 자격을 갖게 된다. (단, 절대 run()을 직접 호출하면 안된다. start()를 호출하면 start()가 run()을 대신 호출할 것이다.)

-Win32와 Pthreads에서는 공유 데이터가 단순히 전역 변수로 선언되기 때문에 스레드 간의 데이터 공유를 쉽게 할 수 있다. 그러나 JAVA는 객체 지향 언어이기 때문에 전역 변수의 개념을 제공하지 않는다. JAvA에서 스레드간 데이터 공유를 할려면 공유 객체에 대한 참조를 전달해야 한다. 

-부모 스레드가 더 이상 진행하기 전에 자식 스레드가 끝나기를 기다리기 위해 join()메서드를 사용한다. 


4.스레드와 관련된 문제들(Threading Issues)

-다중 스레드 프로그램에서 고려해야 할 몇몇 문제들을 논의한다. 


4-1.Fork() 및 Exec() 시스템 호출

-한 프로그램의 스레드가 fork()를 호출하면 새로운 프로세스는 모든 스레드를 복제해야 하는지 아니면 한 개의 스레드만 복제해야 하는지로 나뉜다. 

-exec()를 호출하면 exec()의 매개변수로 지정된 모든 스레드를 포함한 전체 프로세스를 대체시킨다. 

-즉, fork() 후 바로 exec()를 부른다면 exec()의 매개변수로 지정한 프로그램이 모든 것을 대체 할 것이기 때문에 호출한 스레드만 복사해주는 fork()가 적절하다. 그러나 fork() 후 exec() 하지 않으면 모든 스레드를 복제해야 한다. 


4-2.취소(Cancellation)

-스레드 취소는 스레드가 끝나기 전에 그것을 강제로 종료시키는 작업을 말한다. 

-취소하려는 or 취소되어야 하는 스레드를 목적 스레드(target thread)라고 부른다. 

-목적 스레드의 취소 방법은 두 가지 방식이 있다. 
    a.비동기식 취소(asynchronous Cancellation): 한 스레드가 목적 스레드를 즉시 강제종료

    b.지연 취소(deferred Cancellation): 목적 스레드가 주기적으로 자신이 강제종료 해야하는지를 검사한다. 

-스레드 취소는 할당된 자원들 때문에 신중해야한다. 


4-3.신호처리(Signal Handling)

-신호는 UNIX에서 프로세스에게 어떤 사건이 일어났음을 알려주기 위해 사용된다. 

-신호는 다음과 같은 형태로 전달된다. 

a.신호는 특정 사건이 일어나야 생성된다. 

b.신호가 생성되면 프로세스에게 전달된다.

c.신호가 전달되면 반드시 처리되어야 한다. 

-모든 신호는 둘 중 하나의 처리기에 의해 처리된다. 

a.디폴트 신호 처리기

b.사용자 정의 신호 처리기

-다중 스레드 프로그램에서 어느 스레드에게 신호를 전달하는가는 다음과 같은 선택이 존재한다. 

a.신호가 적용될 스레드에게 전달한다. 

b.모든 스레드에게 전달한다. 

c.몇몇 스레드들에게만 선택적으로 전달한다. 

d.특정 스레드가 모든 신호를 받도록 지정한다. 


4-4.스레드 풀(Thread pools)

-다중 스레드 서버의 문제점은 다음과 같다. 

a.서비스마다 스레드 생성에 소요되는 시간이 있다. 

b.동시에 가능한 최대 스레드 수의 한계를 정해야 한다. 

-이러한 문제 해결을 해주는 방법의 하나로 스레드 풀을 꼽을 수 있다.
-스레드 풀의 기본 골조는 일정한 수의 스레드를 만들어 두고 요청이 오면 할당하고 끝나면 반환하고 모자르면 기다리는 것이다. 

-스레드 풀의 장점

a.새 스레드를 만들기보다 기존 스레드로 서비스해 주는 것이 더 빠르다.

b.스레드 풀은 임의 시각에 존재할 스레드 개수에 제한을 둔다. 이러한 제한은 많은 수의 스레드를 병렬 처리할 수 없는 시스템에 도움이 된다. 


4-5.스레드별 데이터(Thred-Specific Data)

-한 프로세스에 속한 스레드들은 그 프로세스의 데이터를 모두 공유한다. 그러나 상황에 따라 각 스레드가 자신만 사용가능한 데이터를 가져야 할 필요도 있다. 그러한 데이터를 스레드별 데이터라 부른다. 


4-6.스케줄러 액티베이션(Scheduler Activations)

-스레드 라이브러리와 커널의 통신도 고려해야할 문제이다. 

-사용자 스레드 라이브러리와 커널 스레드 간의 통신 방법 중 하나는 스케줄러 액티베이션이란 방법이다.  

'IT > 운영체제' 카테고리의 다른 글

CPU스케줄링  (0) 2016.12.20
프로세스(process)  (0) 2016.11.24
운영체제(operating system)이란?  (0) 2016.11.23
운영체제 포스팅에 앞서...  (0) 2016.11.23

개인적으로 헬스를 처음 시작하는 사람들이 하는 실수는 기본 원리를 무시하고 운동 스케줄, 운동 자세, 강도에 초점을 맞추는 것이라 생각합니다. 

운동을 하면서 친구들에게 많은 질문을 받습니다. 

그중에 제일 많았던 질문은 "형 요즘 보충제도 먹고 운동도 꾸준히 하는데 근육이 안커요.", "먹는 것도 줄이고 매일 운동도 하는데 살이 안 빠져요." 같은 종류의 질문을 많이 받았습니다. 그러면서 이어지는 질문은 "가슴 운동을 할 때 어떤 걸 더할까 하는대 어떻게 생각해요." "무게를 더 올려볼까 하는대 어떻게 생각해요." 등의 질문을 합니다. 


이야기하기에 앞서 밑에 링크된 영상을 봐주시길 바랍니다. 

위 영상을 정리해보면 

a.근섬유가 찢어질 정도의 충분한 운동을 해준다. 

b.찢어진 근섬유가 회복될 때 사용되는 충분한 영양소를 공급해 준다. 

이 2가지 조건을 만족하는 근육이 커진다는 것은 명확한 원리입니다.


다시 아까 받았던 질문으로 돌아오겠습니다. "형 요즘 보충제도 먹고 운동도 꾸준히 하는대 근육이 안커요. 그래서 제가 어떻게 해볼가 하는대 어떻게 생각하세요."  여기서 지적해 주고 싶은것은 근육이 안 크면 그 이유는 분명히 있습니다. 보충제를 먹는다지만 다른 식사가 부실하거나 잘못되서 근육 생성을 저해하기 때문에 안 클 수도 있고, 운동은 꾸준히 하지만 근섬유를 제대로 못 찢었던 것이 원인일 수도 있는 것입니다. 그렇게 정확한 원인이 무엇인지 찾고 그 문제에 대한 해결법으로 식사량을 늘리던, 운동 자세를 바꾸던, 운동 강도를 바꾸던, 운동 스케줄을 바꾸던 해야 하는대 시작한 지 얼마 안 되신 분들은 일단 스스로 아무 해결방안이나 적용한다는 겁니다.  그렇게 해결 하려 하니 가끔 맞는 경우도 있지만 엉뚱한 해결법으로 원하는 효과가 나오지 않으면 사람들은 마치 슬럼프라 착각을 하고 운동에 흥미를 잃습니다. 


그러니 이 글을 보신 분들은 꼭 자가진단을 하면 제대로 된 해결법을 찾으시길 바랍니다.

위의 내용을 다시 정리해 보겠습니다. 


개인적으로 헬스는 크게 3가지 모드라고 생각합니다.
     a.근육량의 증가

     b.체지방량 감소

     c.현상유지 
이렇게 헬스의 목적이 정해진다 생각합니다. 


근육량의 증가 원리

a.근섬유가 찢어질 정도의 충분한 운동을 해준다. 

b.찢어진 근섬유가 회복될 때 사용되는 충분한 영양소를 공급해 준다. 

이 2가지 조건을 만족하는 근육이 커진다


체지방량 감소

a.먹는 음식의 총 칼로리가 하루 전체 칼로리 소모량 보다 적다

b.섭취 총 칼로리보다 칼로리 소모량이 많다. 

이 2가지 조건을 만족하면 체지방은 감소합니다. 


요즘은 하도 많은 정보가 돌아다녀서 다들 아실 겁니다. 

하지만 제가 이야기 하고 싶은 건 각자가 생각하는 헬스의 목표가 이루어지지 않는다면 해결법을 먼저 생각하려고 하지 마시고 자신의 식습관과 운동내용을 상기하면서 어떤 것이 원인일까 생각해 그에 대한 해결법을 처방하셨으면 하는 것입니다. 이제는 주변에 헬스를 하시는 분들한테 질문을 할때도 "내가 요즘에 근육통이 매일 느껴질 정도로 운동은 꾸준히 하는대 근육이 안 크더라 아마도 먹는 거 때문인 거 같은대 어떻게 해볼까?" 라는 질문을 하면 좀 더 경험이 있는 사람들은 정확히 어떤 것을 바꾸어 보라는 조언을 해주실 수 있을 겁니다. 

이 글을 읽으시는 분들에게 많은 도움이 되셨으면 합니다. 


올해 7월경부터 주변 지인들중에 독서에 관심 있는 친구들과 독서 모임을 가지고 있습니다. 

현재는 2주에 한 번씩 책을 한 권씩 읽어 책에 대한 이야기 혹은 토론을 하는 형식으로 진행하고 있습니다. 한번은 자유 도서를 한번은 지정도서를 읽는 방식을 취하고 있습니다. 방식은 항상 더 좋은 방법이 있을까 생각하고 변화를 주려고 노력을 하고 있습니다. 그래서 이번엔 특정 주제를 미리 정해서 그 주제에 맞는 책을 각자 선정하여 읽고 내용을 정리해서 토론을 가지는 형식을 취해볼 예정입니다. 

이 카테고리에는 앞으로 읽은 책의 간단한 내용 정리, 소감, 그에 대한 의견 위주의 정리를 해볼까 합니다. 

혹시나 독서를 해보고자 했는데 매번 실패하셨거나 새로이 독서를 해볼까 하셔서 독서 모임에 관심 있으신 분은 연락주시면 답변드리겠습니다. 


1.자동차 운전 방향과 반대로 걷기


- 차선에서 좌측통행을 한다고 생각하시면 됩니다. 자동차가 오는걸 바라보고 걸어야 만약의 상황에 반응할 수 있어서입니다. 


2.잠자리는 안전한 곳에서


- 저는 여행에 2인용 텐트를 들고 다녔습니다. 물론 가끔은 찜질방도 가고 여관도 가고 아는 지인 집에서도 머물렀습니다. 

텐트는 2인용이어서 무게가 가벼워 충분히 들고 다닐 만 했습니다. 평소에 주로 텐트를 쳤던 장소는 초등학교였습니다. 물론 초등학교 경비원님들께 사정을 말씀드리고 머물렀습니다. 하지만 초등학교에서 무조건 머물 수 있는 건 아닙니다. 들어보니 초등학교에서 발생한 사건은 학교의 책임이어서라 합니다. 그래서 사전에 학교 내에서 특정일에 체류한다는 신청을 해야 한다고 합니다. 저는 모르고 갔었습니다. 하지만 대부분 학교에서 사정을 말씀드리면 허락해주셨습니다. 간혹 안된다 하는곳에선 주변에 주차장, 해변, 대학 캠퍼스, 개천 주변, 찜질방 등 다양한 곳에서 머물렀습니다.

충분한 경제적 여유가 있는 여행을 하시는 분들은 찜질방이나 여관, 모텔 등의 사용을 적극 권해드리고 싶습니다. 아 한 가지 더 참고하셔야 할 것이 찜질방이 없는 곳이 생각보다 많았습니다. 잘 확인하시길 바랍니다.


3.짐 관리


- 짐 관리는 혼자 다니지 않는 이상 한 명이 짐 옆에 있으면 됩니다.


4.씻는 것과 빨래하기


- 씻는 것은 주로 수돗가에서 사타구니와 겨드랑이 세안 위주로 했습니다. 빨래도 수돗가에서 했습니다. 여름에 여행을 해보니 아침에 빨아서 가방에 널고 걸으면 낮 중에는 다 말랐습니다.


5.물은 항상 충분하게


- 물은 보통 혼자서 하루에 2L짜리 생수를 사서 가방에 넣어두고 앞쪽에 따로 물병을 매달아서 다 마시면 채우고 하는 방식으로 여행했습니다. 평소에 30Km가량 걸었는대 하루에 1병씩은 꼬박꼬박 마셨습니다. 물을 왜 항상 충분하게 해야한다 말하는 것은 경험해서입니다. 한번은 광양에서 여수를 넘어가는데 저랑 친구 둘이서 합쳐 한 600mL정도가 있었습니다. 그래서 여행 도중에 사자고 하면서 출발을 했습니다. 하지만 20km가 넘는 구간 동안 조그마한 슈퍼 하나 없었습니다. 정말 죽는 줄 알았습니다. 그 뒤로는 아침에 물이 적당히 남아있더라도 무겁더라도 하나 더 사서 여행을 했습니다. 


6.음악 듣지 않기


- 음악을 들으면서 걷다 사고가 날 수 있습니다. 무조건 듣지 마시길 바랍니다.


7.하루 동안 걷는 거리


- 먼저 저와 친구 둘 다 예전에 꾸준히 운동을 하여서 체력도 정당히 있고 건강과 체력에 대해서 걱정 없이 출발했습니다. 하지만 첫날 신이나 무리해서 37Km 정도의 거리를 강행했습니다. 하지만 다음날의 근육통은 정말 말도 못 할 정도였습니다. 그 뒤로 다양한 Km를 걸었습니다. 그렇게 걷다보니 하루에 32Km를 넘지않는 거리는 목표로 하면 다음 날에 전혀 지장도 가지 않고 재밌는 여행을 할 수 있다고 생각합니다. 참고하시길 바랍니다.


8.현금은 넉넉히


- 시골길을 여행하다 보면 카드를 안 받는 슈퍼들이 아직도 많습니다. 물론 안되는 시장들도 많았습니다. 그래서 항상 3만원 정도의 현금은 가지고 있는 것을 추천합니다. 혹시 비슷한 경험 하실 수 있다 생각하여 한가지 에피소드 남겨 드리겠습니다. 진도를 여행하고 목포로 떠나는 길이었습니다. 허나 길을 잘 못 들어서 쉬미항에 도달하였습니다. 그 당시 쉬미항에서 목포로 향하는 도로는 공사 중이어서 막다른 곳이었습니다. 방법은 배편을 타고 목포를 가거나 다시 돌아가야 하는 상황이였습니다. 하지만 배는 현금만 받았고 당시 현금은 없었습니다. 주변에 ATM기는 없었습니다. 그때 옆에 있는 음식점에 사정을 말씀드리고 부탁하여 카드로 22,000원을 긁고 대신 현금으로 20,000원을 받아서 배를 타고 목포로 갈 수 있었습니다.


9.길거리에 쓰레기 버리지 말기


- 이건 팁이나 주의 사항보다 여행을 하며 몇년이나 지난 쓰래기인지 정말 많은 쓰레기를 볼 수 있었습니다. 그나마 도시는 환경미화원분들이 환경미화에 힘을 써 주시지만, 지방 도로는 그렇지 않은 거 같습니다. 여행을 가시는 분들은 적어도 자신의 쓰레기는 자신이 가지고 가서 쓰레기통에 버렸으면 합니다. 


10.밧데리 충전


- 제가 여행을 하며 밧데리 충전은 총 4가지 방법으로 했었습니다. 

a.음식점에서 밥을 먹을 때 사장님한테 말씀드리면 좀 쉬다 가라 하십니다. 그렇게 앉아서 사장님들이랑 이런저런 이야기도 나누고 충전도 하고 대휴식도 하였습니다. 

b.찜질방에서 잘때 충전을 하였습니다. 

c.pc방에서 컴퓨터 하면서 충전하였습니다. 

d.여행하다 보면 화장실 같은 곳에 콘센트가 남아있는 곳이 있습니다. 그런 곳에 잠시 충전을 하였습니다. 


11.베이비 파우더 챙기기

- 걸어서 여행을 하다 보니 사타구니가 정말 많이 쓸렸습니다. 베이비 파우더가 정말 유용하였습니다.



주의 사항이나 팁이 될만한 내용을 정리해 보았습니다. 더 궁금하시건 댓글 남겨 주시면 답변드리겠습니다. 

다음번 내용은 여행을 가면서 챙겨갔던 준비물에 대하여 포스팅할 계획입니다.




1.프로세스 개념(Process Concept)

- 실행중인 프로그램, 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 된다.      


1-1.프로세스 상태

- 새로운(new), 실행(running), 대기(waiting), 준비완료(ready), 종료(terminated)


Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.114


1-2.프로세스 제어 블록(PCB, Process Control Block)

- 특정 프로세스와 연관된 여러 정보를 수록한다. 

- 프로세스 상태, 프로그램 카운터(다음에 실행할 명령어의 주소)CPU 레지스터, CPU-스케줄링 정보, 메모리 관리 정보, 회계 정보, 입출력 상태 정보


1-3.스레드(Threads)

- CPU 이용의 기본 단위이다. 

- 스레드를 지원하는 시스템에서는 PCB에 각 스레드에 관한 정보를 포함하도록 확장한다. 

- 자세한 내용은 추후 포스팅 예정


2.프로세스 스케줄링(Process Scheduling)

- 다중 프로그래밍의 목적은 CPU 이용을 최대화하기 위하여 항상 어떤 프로세스가 실행중이도록 하는데 있다. 


2-1.스케줄링 큐

- 프로세스가 시스템에 들어오면 잡큐에 놓여진다. 

- 연결 리스트 형식이다. 

- 준비완료 상태에서 실행을 대기하는 프로세스들은 준비완료 큐(read Queue)라 불리는 리스트상에 유지된다. 

- read Queue의 헤더엔 리스트의 첫 번째와 마지막 PCB를 가리키는 포인터를 포함한다. 

- 특정 입출력 장치를 대기하는 프로세스들의 리스트를 장치 큐(device Queue)라고 한다. 

- 각 장치는 장치 큐를 가진다. 

- 프로세스에 CPU가 할당되어 실행되면 다음 중 하나가 발생할 수 있다.  

a.프로세스가 입출력을 요청하여 입출력 큐에 넣어질 수 있다. 

b.프로세스가 새로운 서브 프로세스를 생성하고 그 프로세스의 종료를 기다릴 수 있다.

c.프로세스가 인터럽트의 결과에 따라 강제로 CPU로부터 제거되어 준비완료 큐에 다시 놓일 수 있다. 


2-2.스케줄러

- 장기 스케줄러(잡 스케줄러) = 실행 준비가 완료되어 있는 프로세스들을 선택하여 실행하기 위해 메모리로 적재한다. 

- 단기 스케줄러(CPU 스케줄러) = 실행 준비가 완료되어 잇는 프로세스들 중에서 선택하며 이들 중 하나에게 CPU를 할당한다. 

- UNIX와  Micro Windows 같은 시분할 시스템들은 장기 스케줄러가 없으면 모든 새로운 프로세스를 단기 스케줄러를 위하여 단순히 메로리에 넣는다. 이들 시스템들의 ㅇ나정성은 물리적인 제한이나 사용자들의 자체 조정 본능에 의존한다. 

- 시분할 시스템과 같은 일부 운영체제들은 추가로 중기 스케줄링(medium-term sechdular)을 도입한다. 

 

Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.120

- 중기 스케줄러의 핵심 아이디어는 메모리에서 프로세스들을 제거하여, 즉 CPU를 위한 경쟁에서 제거하여 다중 프로그래밍의 정도를 완화하는 것이 바람직할 때도 있다는 것이다. 이러한 기법을 스와핑(swaping)이라고 한다. 

2-3.문맥 교환(Context Switch)

- CPU를 다른 프로세스로 교환하려면 현재 프로세스의 상태를 저장하고 다른 프로세스의 저장된 상태를 복구하는 작업이 필요, 이 작업을 Context Switch라고 한다. 

- Context Switch가 발생하는 시간 동안 시스템은 아무일을 못하기에 순수한 오버헤드이다. 


3.프로세스에 대한 연산(Operation on Processes)

- 대부분의 시스템 내의 프로세스들은 병행 실행될 수 있으며, 반드시 동적으로 생성되고, 제거될 수 있다. 


3-1.프로세스 생성

- 생성하는 프로세스를 부모 프로세스, 새로운 프로세스를 자식 프로세스라고 부른다. 

- 트리의 형태이다. 

- 대부분의 운영체제는 프로세스 식별자(PID)로 구분한다.

- 서브 프로세스는 O/S로 직접 자원을 얻거나 부모 프로세스 자원의 부분 집합을 사용하도록 강요받을 수 있다. 

- 부모 프로세스는 자원을 분할하여 자식들에게 나누어 주거나 일부 자원을 공유할 수도 있다. 

- 프로세스가 생성될 때 초기화 자료(입력된)가 부모 프로세스에서 자식 프로세스로 전달 될 수 있다. 

- 프로세스 생성시 실행과 관련하여 두 가지 가능성이 있다. 

a.부모가 자식과 병렬로 실행된다. 

b.부모가 모든 자식 또는 일부 자식이 끝날때까지 기다린다. 

- 새로운 프로세스들의 주소 공간 측면에서 볼때 다음과 같은 두 가지 가능성이 있다. 

a.자식 프로세스는 부모 프로세스의 복사본이다.

b.자식 프로세스가 자신에게 적재될 새로운 프로그램을 갖고있다.

- 새로운 프로세스는 원래 프로세스의 주소 공간의 복사본으로 구성된다. 두 프로세스(부모와 자식)의 한가지 다른 점은 fork()의 반환 코드가 서로 다르다는 것이다. (자식 프로세스를 위한 PID의 값은 0이고, 부모 프로세스의 PID값은 0보다 큰 정수 값이라는 것이다. 

- fork()후 두 process중 하나를 자신의 메모리 공간을 새로운 프로그램으로 바꾸기 위하여 exec()을 호출한다. 

- exec()시스템 호출은 이진 파일을 메모리로 적재하고 실행한다. 

- 부모는 wait()시스템 호출로 자식 프로세스가 끝나길 기다린다. 자식은 암시적이거나 명시적으로 exit()를 사용


Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.125


3-2.프로세스 종료

- exit()이 호출된 시점에서 부모 프로세스에게 상태값을 반환하고 자원은 O/S에 반납한다. 

- 또 다른 방법으로도 프로세스가 종료될 수 있다. 그 방법은 다른 프로세스가 임의로 종료시킬 수 있다. (보통은 부모만 가능)

- 부모는 다음과 같은 이유로 자식들을 종료한다.

a.자식이 할당된 자원을 초과할때

b.자식에게 할당된 태스크가 더 이상 필요 없을때

c.부모가 exit하는데, 운영체제는 부모가 exit한 후 자식의 실행을 계속하는 것을 허용하지 않는 경


4.프로세스간 통신(Interprocess Communication)

- 협력 프로세스간 데이터 교환을 위한 프로세스간 통신 기법을 필요로 한다. 

- 프로세스간 통신은 기본적으로 공유 메모리, 메시지 전달 두 가지 모델이 있다.

- 공유 메모리 모델은 최대 속도와 편이를 제공한다. 

- 메시지 전달 모델은 충돌을 회피할 필요가 없기 때문에 적은양의 데이터를 교환하는데 유용한다. 


5.클라이언트 서버 환경에서 통신(Communication in Client-Server System)

- 공유 메모리와 메시지 전달 기법은 클라이언트-서버 시스템의 통신에도 사용할 수 있다. 

- 추가적인 통신 전략으로 소켓, 원격 프로시저 호출(RPCs), 파이프가 있다. 


'IT > 운영체제' 카테고리의 다른 글

CPU스케줄링  (0) 2016.12.20
스레드(다중 스레드 프로그래밍)  (0) 2016.11.29
운영체제(operating system)이란?  (0) 2016.11.23
운영체제 포스팅에 앞서...  (0) 2016.11.23

운영체제(operating system)이란 컴퓨터 하드웨어를 관리하는 프로그램이라 할 수 있습니다. 

컴퓨터 시스템은 대개 하드웨어, 운영체제, 응용 프로그램 및 사용자로 구분할 수 있습니다. 

Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.4

 

위 사진에서 보이는 것처럼 운영체제는 하드웨어와 사용자 사이의 중재자 역할을 합니다. 

컴퓨터 시스템들이 사용자 프로그램을 실행하고 문제점들을 해결하기 편하게 하기 위하여 다양한 응용 프로그램들이 개발되었고 이것들을 하나의 소프트웨어로 통합한 것이 운영체제의 탄생 배경이라 합니다. 


운영체제의 역할

 - 응용 프로그램을 위한 기반 제공

 - 사용자와 하드웨어 사이의 중재자

 - 하드웨어 관리




'IT > 운영체제' 카테고리의 다른 글

CPU스케줄링  (0) 2016.12.20
스레드(다중 스레드 프로그래밍)  (0) 2016.11.29
프로세스(process)  (0) 2016.11.24
운영체제 포스팅에 앞서...  (0) 2016.11.23

우선 저는 어릴 적부터 좀 살집이 좀 있어서 부모님이 살 빼라 하면서 부모님과 같이 마라톤으로 운동을 시작했습니다. 

운동을 매일 하는 습관은 그때 들었던 거 같습니다. 하지만 먹는 걸 좋아해서 살은 빠졌다 쪘다를 반복했었습니다. 

그러다 2009년에 군대 가기 전에 85키로 까지 쪘었고, 군대에서 매일 운동을 하면서 살은 많이 빠졌지만 몸에 근육이 없어 너무 볼품없다 생각하여 헬스를 하던 후임에게 배우면서 2010년 겨울에 어설프게 시작을 하였습니다. 
2011년 겨울에는 살을 많이 빼서 얼마 있지도 않는 근육을 보면서 내 몸이 좋다고 하는 착각에도 빠져봤었습니다.

그 이후로 2012년에도 어설프게 운동을 하였고, 2013년도에는 단과대 회장을 하면서 매일 술 먹고 운동은 하지 않았고 여름에 2달 동안 도보여행을 하면서 살은 쭉 빠졌다 다시 찌고, 2014년이 되면서 다시 운동을 시작했었습니다. 

 제대로 헬스를 시작하게 된 계기는 2014년도에 동네에 있는 형님이 헬스를 알려달라 해서 막상 알려줄려는데 제대로 설명할 수 있는 게 없다는 걸 느끼면서 였습니다.

 그 뒤로 헬스에 대해서 여러 자료를 찾아보고 운동하는 친구들과 정보를 나누고 배우면서 운동을 꾸준히 하였고, 지금은 주변에서 운동하는 친구들이 질문하면 충분한 설명을 한다고 생각합니다.

지금 몸은 술을 좋아하는지라 근육량도 많고 체지방도 많은 상태입니다. 


 운동에 대한 포스팅은 크게 4가지로 할까 생각중 입니다. 

1.헬스를 하면서 기본적으로 알아야하는 내용, 팁   2.특정 운동, 기구에 대한 운동법   3.식단짜기, 혹은 영양에 대한 내용   4.제 운동에 대한 내용

1번에는 헬스에 입문하시는 분들이 꼭 알았으면 하는 내용 위주로 포스팅하겠습니다. 

2번에는 요청 글을 하나 만들어두어서 알고 싶으신 운동법에 대하여 댓글 남기시면 그 운동에 대한 정보를 정리해서 올려드리려고 합니다. 

3번에는 식단에 대한 기본적인 내용과 질문을 주시면 그에 대한 답변을 드리려고 합니다. 

4번에는 제 운동 루틴과 식단을 하는 시기에는 식단을 공유하려고 합니다. 


헬스에는 정확한 답이 없기에 저와 다른 생각을 가지신 분들도 많다는 점과 저보다 더 잘하시는 분들도 많다는 점 기억하시면서 소통했으면 합니다. 

또 위에 제 과거에 어떤 식으로 운동했는지 어떤 상태였는지 등을 적은 이유는 참고해서 보시라고 쓴 것 입니다. 

운영체제공부를 하면서 공부한 내용을 정리하는 방향으로 포스팅할 계획입니다. 
운영체제 폴더에 포스팅되는 내용과 사진의 출처는 모두 책입니다. 
책은 밑에 사진에 나온 책입니다. 

모자르는 내용은 이 책을 참고하시면 될 꺼 같습니다. 
혹시 보시다 잘못된 이해와 포스팅 내용은 지적해 주시면 수정하도록 하겠습니다. 

'IT > 운영체제' 카테고리의 다른 글

CPU스케줄링  (0) 2016.12.20
스레드(다중 스레드 프로그래밍)  (0) 2016.11.29
프로세스(process)  (0) 2016.11.24
운영체제(operating system)이란?  (0) 2016.11.23

저는 2013.06.23~2013.08.22까지 총 61일에 걸쳐 친구와 두 명이서 도보여행을 했습니다. 
예전에 네이버에서 블로그를 하면서 포스팅을 조금 하다 안 했었습니다. 
하지만 지금에서라도 이렇게 포스팅하는 건 지금도 떠오르는 그때의 풍경과 경험들, 그 추억들을 정리하여 이 추억들이 희미해 질 때쯤 한 번씩 보며 추억을 떠올리고 싶고, 저처럼 도보여행을 하시는 분들에게 좋은 정보가 되었으면 해서입니다. 

이 여행을 가게 된 계기는 친구와 술을 마시면서 친구가 스페인 성지순례 길을 도전해보는건 어떻냐고 하다가 국내 먼저 하자 하면서 술김에 계획했었습니다. 또 그 당시 미래에 대한 고민이 많았던 시기여서 생각을 정리하기에 좋은 기회라는 생각도 한 했었습니다. 
제가 지나간 코스는 크게 원주 > 강릉 > 울산 > 거제도 > 돌산도 > 해남 > 진도 > 목포 > 광주 > 담양 이렇게 다녀왔습니다. 
혹시 이 글을 보시는 분들 중에 도보여행을 준비하고 계시거나 생각이 있으신 분은 꼭 진행해 보시길 추천합니다. 

앞으로 도보여행 준비하기, 도보여행 시 팁, 10일단위로 어떤 경로 어떤 일이 있었는지 등에 대한 이야기, 다녀오고 나서 들었던 생각들에 관해서 이야기해 볼 생각입니다. 보시면서 궁금한 점 등은 이야기해주시면 소통하겠습니다. 

+ Recent posts