Philosophers

나는 한번도 철학이 치명적일 수 있을지 몰랐다.

 

I. Intro

철학은 존재와 생각, 가치와 사유, 마음 그리고 언어에 대한 일반적이고 기초적인 물음에 관한 학문이다. 이런 물음들은 연구되어야 하고 풀어나가야 할 것으로 여겨진다. 이러한 물음의 발단은 기원전 570년 경 피타고라스에 의해 출발했을 것이라고 추정된다. 철학적인 방법은 물어보기, 비판적 토론, 이성적 논쟁, systamatic presentation을 포함한다. 고전적인 철학은 어떤 것(질문에 대한 답)을 알고 증명하는 것 자체가 가능하냐 는 것도 포함한다. 무엇이 현실적인지, 살기 위한 최선의 방법이 있는지와 같은 실용적 질문도, 정의롭게 사는 게 좋은지 정의롭지 않게 사는 게 좋은지, 인간은 자유의지가 있는지 에 대한 것도 모두 철학적인 질문이다.

 

역사적으로 "철학"은 모든 지식을 망라하는 개념이었다. 19세기까지 아리스토텔레스의 철학은 천문학, 의학, 물리학을 포함했다. 예를 들어 뉴턴의 1687년 만유인력의 법칙은 최근에서야 물리학으로서 취급됐다. 19세기에 들어서 근대의 대학과 학회들은 이들을 전문화하기 시작했다. 현대에는 심리학과 사회학, 언어학과 경제학 등을 모두 나누고 있다.

 

반면 예술, 과학, 정치 그리고 다른 일부 과목들은 어느 정도 철학을 추구하고 있다. 예를 들어 미(beauty)는 주관적인가 객관적인 것인가? 정치적인 유토피아는 허상에 불과한 것인가 아니면 실재할 수 있는 것인가? (주. 아래는 해석하기 애매해서 원문으로 남겨둠.) Major sub-fields of academic philosophy include metaphysics ("concerned with the fundamental nature of reality and being"), epistemology (about the "nature and grounds of knowledge [and]...its limits and validity"), ethics, aesthetics, political philosophy, logic and philosophy of science. (대충 철학은 모든 분야에 걸쳐 있다는 뜻.)

 

II. Mandatory Part

당신은 총 세 개의 서로 다른 프로그램을 만들어야 한다. 프로그램의 기본적인 규칙은 다음과 같다:

  • 이 프로젝트는 C언어로 짜야 하고 Norm을 지켜야 한다. Leak, Crash, norm error는 0점 처리한다.

  • 수많은 철학자들이 큰 원탁을 둘러싸고 있는데, 각각의 철학자는 다음의 세 가지 중 하나를 하고 있다:

    식사, 생각, 수면

  • 식사 중에는 생각이나 수면을 할 수 없고, 생각 중에서는 수면이나 식사를 할 수 없다. 수면 중에도 마찬가지.

  • 큰 원탁의 가운데에는 큰 그릇에 담긴 스파게티가 있다.

  • 원탁 위에는 몇 개의 포크가 있다.

  • 하나의 포크로는 스파게티를 먹기 힘들기 때문에 각각의 철학자는 식사를 할 때 양 손에 포크를 하나씩 쥐고 먹어야 한다.

  • 철학자는 배가 고프면 안 된다.(never be starving)

  • 모든 철학자는 먹어야 한다.

  • 철학자는 서로 얘기하지 않는다.

  • 철학자는 다른 철학자가 죽기 직전인지 아닌지 알 수 없다.

  • 철학자가 식사를 마치면 포크를 내려놓고 잠을 잔다.

  • 철학자가 잠을 다 자면 생각하기 시작한다.

  • 시뮬레이션은 철학자가 죽을 때 멈춘다.

  • 각각의 프로그램은 다음과 같은 옵션을 가져야 한다.

    number_of_philosophers, time_to_die, time_to_eat, time_to_sleep, [number_of_times_each_philosopher_must_eat]

    • number_of_philosophers 는 철학자의 수와 포크의 수를 결정한다.
    • time_to_die 밀리세컨드 단위 기준으로 철학자가 지난 번 식사를 끝낸 지로부터 time_to_die 밀리초 내에 식사를 시작하지 않으면 그 철학자는 죽는다.
    • time_to_eat은 philosopher가 밥을 먹는 데 걸리는 시간이며 식사 중에는 두 개의 포크를 사용해야 한다.
    • time_to_sleep은 철학자가 잠을 자는 데 보내는 시간이다.
    • number_of_times_each_philosopher_must_eat은 선택적인(optional) 인자(argument)로서 모든 철학자의 식사 횟수가 number_of_times_each_philosopher_must_eat 에 도달하면 시뮬레이션이 중단된다. 이 옵션을 specify하지 않는 경우 시뮬레이션은 철학자가 죽는 시간에 종료된다.
  • 모든 철학자는 1 ~ number_of_philosophers 까지의 숫자를 부여받는다.

  • philosopher number 1number_of_philosophers 옆에 있어야 한다. 즉, N번째 철학자는 N-1번째 철학자와 N+1 번째 철학자 사이에 있어야 한다.

  • 철학자의 모든 상태 변화는 다음과 같이 출력되어야 한다.(X는 philosopher number이고 timestamp_in_ms는 밀리초로 표현된 현재 timestamp이다.)

    • timestamp_in_ms X has taken a fork
    • timestamp_in_ms X is eating
    • timestamp_in_ms X is sleeping
    • timestamp_in_ms X is thinking
    • timestamp_in_ms X died
  • 어떤 철학자의 상태가 출력되는 것은 다른 철학자의 상태가 출력되는 것과 섞이면 안 된다.

  • 어떤 철학자의 죽음과 그 철학자의 상태 출력까지 10 millisecond 이상 걸리면 안 된다.

  • Philosophers should avoid to die !

program I

sadfasf

이 버젼에서는 다음의 규칙이 추가됨:

  • 철학자 사이마다 하나의 포크가 주어짐. 그래서 각각의 철학자 입장에서는 오른쪽 왼쪽에 포크가 하나씩 놓여져 있음.
  • 포크는 mutex(상호배제) 되어야 한다. 포크가 복제되는 현상을 방지하기 위해. (주. 링크 걸어 놓은 곳에서 c언어의 mutex에 대해 설명해놓음.)
  • 각각의 철학자는 하나의 쓰레드여야 한다.(원문: Each philosopher should be a thread.)

 

Program II

asdf

이번 버전에서는 다음의 규칙을 따른다:

  • 모든 포크는 원탁 가운데에 있다.

  • 그들의 상태는 메모리에 저장돼있지 않지만 사용가능한 포크는 semaphore세마포어 에서 확인한다.

    (원문 : They have no states in memory but the number of available forks is represented by a semaphore.)

  • 각각의 철학자는 하나의 쓰레드이다.

 

Program III

imad

이번 프로그램은 다음의 규칙을 따른다:

  • 모든 포크는 원탁 가운데에 있다.
  • 그들의 상태는 메모리에 저장돼있지 않지만 사용가능한 포크는 semaphore세마포어 에서 확인한다.
  • 모든 철학자는 하나의 프로세스이고 main process는 철학자이면 안 된다.(the main precess sholdn't be a philosopher)
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom